php - 为什么这个更新查询只更新一条记录一次

标签 php mongodb

$coll->update(
  array(
    "uid"=(int)$uid,
    "status"=>1,
    "time"=>array('$gt'=>0,'$lte'=>$time)
  ),
  array(
    '$set'=>array("status"=>0)
  )
);

如果你看不懂 PHP,上面代码的 CLI 版本:

db.we.update({"uid":1,"status":1,"time":{"$lte":1324403899}},{"$set":{status:0}})

其中 time 是一个时间戳整数,status 是 int 0 或 1。

最佳答案

这是 MongoDB 的默认更新行为。如果您想一次更新多个文档,您必须明确提供 multi 标志:

db.collection.update( criteria, objNew, upsert, multi )

所以你必须使用

db.we.update({"uid":1, "status":1, "time" : {"$lte":1324403899}},
             {"$set":{status:0}}, 
             false, 
             true);

相反。

来自documentation :

If you are coming from SQL, be aware that by default, update() only modifies the first matched object. If you want to modify all matched objects, you need to use the multi flag.

关于php - 为什么这个更新查询只更新一条记录一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580159/

相关文章:

php - MySQL连接4个表而不重复

PHP MySQL + 基于表单选择创建搜索查询

MongoDB - 如何通过引用连接父产品和子产品

spring - 使用 Spring Boot >= 2.0.1.RELEASE 将 ZonedDateTime 保存到 MongoDB 时出现 CodecConfigurationException

php - PHP-无法创建数组

php - MYSQL选择每个 "page id"的3个结果

php - 如何显示MySQL表的平均值

android - 制作 Node.js 服务器的独立解决方案

MongoDB oplog有键名带点的记录,查询不到,afaict

mongodb - 来自 MongoDB 的 alpha 驱动程序的简单 CRUD 示例