2011-12-20 7 views
4
$coll->update(
    array(
    "uid"=(int)$uid, 
    "status"=>1, 
    "time"=>array('$gt'=>0,'$lte'=>$time) 
), 
    array(
    '$set'=>array("status"=>0) 
) 
); 

たら、一つのレコードを更新するのはなぜ、上記のコードのCLI版:あなたがPHPを読み取ることができない場合は、この更新クエリのみ

timeは、タイムスタンプの整数であり、状況がint 0または1である
db.we.update({"uid":1,"status":1,"time":{"$lte":1324403899}},{"$set":{status:0}}) 

答えて

10

これは更新のためのMongoDBのデフォルト動作です。一度に複数のドキュメントを更新したい場合は、明示的マルチフラグを提供する必要があります:

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

をので、あなたの代わりに

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

を使用する必要があると思います。 documentationから

あなたはSQLから来ている場合は、のみ最初に一致したオブジェクトを変更するデフォルトでは、更新()があることに注意してください。一致するすべてのオブジェクトを変更するには、マルチフラグを使用する必要があります。

+0

ありがとうございました。非常に明確な答え。投票された。そして、PHPで同じ質問に直面するかもしれない人のために、オプションを追加する方法は、更新関数にarray( "multiple" => ture)を追加することです。 – LotusH

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 

); 
0

今のMongoDBは、複数のドキュメント更新するupdateManyを使用している:( db.collection.updateManyを、 、)

db.collection.updateMany(criteria, objNew) 
関連する問題