Нажмите новое значение для внутреннего массива 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")));
но ничего не происходит, кто-нибудь знает, как это сделать?
Ответы
Ответ 1
Поскольку ни один из этих ответов на самом деле не говорит вам, что здесь не так...
$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"))
Это должно иметь = > не ,
array('$push' => array("done_by" => "2"))
Однако обратите внимание, что каждый раз, когда вы запускаете это, он вставляет еще один "2" , если вы хотите, чтобы MongoDB только вставлял "2" , если он еще не существует в "done_by" , тогда вы должны использовать $addToSet...
array('$addToSet' => array("done_by" => "2"))
Этот оператор не будет добавлять 2 каждый раз, только в первый раз.
Ответ 2
$filter = array('_id'=>$id));
$update = array('$push'=>array('done_by'=>'2'));
$q->update($filter,$update);
Ответ 3
$push => array('done_by' => '2')
Так говорит руководство: { $push : { field : value } }
Ответ 4
u может использовать как это:
$conn = new Mongo();
$q = $conn->server->gameQueue;
$id = new MongoId("4d0b9c7a8b012fe287547157");
$q->update(array("_id"=>$id),array('$addToSet' => array("done_by","2")));