将新值推送到mongodb内部数组 - mongodb / php

时间:2011-01-09 08:41:45

标签: php mongodb

我在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")));

但没有任何反应,任何人都知道如何做到这一点?

5 个答案:

答案 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")));