У меня есть этот документ в монго:
{ "_id": ObjectId("4d0b9c7a8b012fe287547157"), "done_by": ["1"] }
и я хочу добавить другое значение в поле «done_by», поэтому мой ожидаемый документ будет ::
{ "_id": ObjectId("4d0b9c7a8b012fe287547157"), "done_by": ["1","2","3"] }
я пробую это:
$conn = new Mongo(); $q = $conn->server->gameQueue; $id = new MongoId("4d0b9c7a8b012fe287547157"); $q->update(array("_id"=>$id),array('$push' => array("done_by","2")));
но ничего не происходит, кто-нибудь знает, как это сделать?
Поскольку ни один из этих ответов на самом деле не говорит вам, что здесь не так …
$conn = new Mongo(); $q = $conn->server->gameQueue; $id = new MongoId("4d0b9c7a8b012fe287547157"); $q->update(array("_id"=>$id),array('$push' => array("done_by","2")));
Существует проблема с вашим заявлением $ push , вы не нажимаете «done_by» со значением «2», вы фактически отправляете «done_by» и «2» …
Вот вопрос …
array('$push' => array("done_by","2"))
Это должно иметь a => не a ,
array('$push' => array("done_by" => "2"))
Обратите внимание, что каждый раз, когда вы его запускаете, он вставляет еще один «2», если вы хотите, чтобы MongoDB только вставлял «2», если он еще не существует в «done_by», тогда вы должны использовать $ addToSet …
array('$addToSet' => array("done_by" => "2"))
Это утверждение не будет добавлять 2 каждый раз, только в первый раз.
$filter = array('_id'=>$id)); $update = array('$push'=>array('done_by'=>'2')); $q->update($filter,$update);
$push => array('done_by' => '2')
Так говорится в руководстве : { $push : { field : value } }
u можете использовать как это:
$conn = new Mongo(); $q = $conn->server->gameQueue; $id = new MongoId("4d0b9c7a8b012fe287547157"); $q->update(array("_id"=>$id),array('$addToSet' => array("done_by","2")));