为什么此更新查询仅更新一条记录一次

时间:2011-12-20 18:26:43

标签: 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是时间戳整数,状态为int 0或1。

3 个答案:

答案 0 :(得分:10)

这是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

  

如果您来自SQL,请注意默认情况下,update()仅修改第一个匹配的对象。如果要修改所有匹配的对象,则需要使用多标记。

答案 1 :(得分:1)

现在MongoDB正在使用updateMany来更新多个文档: db.collection.updateMany(,,)

    db.collection.updateMany(criteria, objNew)

答案 2 :(得分:0)

看起来这最初是在PHP中完成的,这可能对使用PHP的任何人都有用:

$collection->update(

    array("uid"=>(int)$uid,"status"=>1,"time"=>array('$gt'=>0,'$lte'=>$time)), //search criteria

    array('$set'=>array('status'=>0)), //update criteria

    array('multiple'=>true) //options

);