我在mongo中有这个文件:
{
"_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")));
但没有任何反应,任何人都知道如何做到这一点?
答案 0 :(得分:41)
由于这些答案都没有告诉你这里有什么问题......
$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"))
但是,请注意,每次运行此操作时,如果您希望MongoDB只插入“2”,如果它在“done_by”中不存在则会插入另一个“2”,那么您应该使用 $ addToSet < / strong> ...
array('$addToSet' => array("done_by" => "2"))
此声明不会每次都添加2,只是第一次。
答案 1 :(得分:4)
$filter = array('_id'=>$id));
$update = array('$push'=>array('done_by'=>'2'));
$q->update($filter,$update);
答案 2 :(得分:2)
$push => array('done_by' => '2')
所谓manual:{ $push : { field : value } }
答案 3 :(得分:0)
.action
当您需要更新使用$filter = array('_id'=>$id));
$update = array('$addToSet'=>array('done_by'=>'2'));
$q->update($filter,$update);
时,可以避免重复插入,从而导致多个条目。
答案 4 :(得分:-1)
$conn = new Mongo();
$q = $conn->server->gameQueue;
$id = new MongoId("4d0b9c7a8b012fe287547157");
$q->update(array("_id"=>$id),array('$addToSet' => array("done_by","2")));