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

dot*_*hlu 4 php mongodb

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

如果你不能阅读PHP,上面代码的CLI版本:

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

其中time是时间戳整数,状态为int 0或1.

mne*_*syn 10

这是MongoDB更新的默认行为.如果要一次更新多个文档,则必须提供标记:

db.collection.update( criteria, objNew, upsert, multi )
Run Code Online (Sandbox Code Playgroud)

所以你必须使用

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

代替.

文档:

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