нажмите новое значение для внутреннего массива mongodb – mongodb / php

У меня есть этот документ в монго:

{ "_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"))); 

но ничего не происходит, кто-нибудь знает, как это сделать?

Solutions Collecting From Web of "нажмите новое значение для внутреннего массива mongodb – mongodb / php"

Поскольку ни один из этих ответов на самом деле не говорит вам, что здесь не так …

 $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")));