$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.
Это поведение по умолчанию для MongoDB для обновлений. Если вы хотите обновить сразу несколько документов, вам явно нужно предоставить флаг multi :
db.collection.update( criteria, objNew, upsert, multi )
так что вам придется использовать
db.we.update({"uid":1, "status":1, "time" : {"$lte":1324403899}}, {"$set":{status:0}}, false, true);
вместо.
Из документации :
Если вы исходите из SQL, имейте в виду, что по умолчанию update () изменяет только первый согласованный объект. Если вы хотите изменить все согласованные объекты, вам нужно использовать флаг multi.
Поскольку это было сделано в 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 );
Теперь MongoDB использует updateMany для обновления нескольких документов: db.collection.updateMany (,,)
db.collection.updateMany(criteria, objNew)