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

2022-08-30 19:43:56

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

但什么都没有发生,有人知道如何做到这一点吗?


答案 1

由于这些答案实际上都没有告诉您这里出了什么问题......

$conn = new Mongo();
$q = $conn->server->gameQueue;
$id = new MongoId("4d0b9c7a8b012fe287547157");
$q->update(array("_id"=>$id),array('$push' => array("done_by","2")));

您的$push语句有问题,您不是在推送值为“2”的“done_by”,而是在发送“done_by”“2”......

这是问题...

array('$push' => array("done_by","2"))

这应该有一个 => 而不是一个 ,

array('$push' => array("done_by" => "2"))

但是,请注意,每次运行此命令时,如果希望MongoDB仅插入“2”(如果它在“done_by”中尚不存在,那么它将插入另一个“2”,那么您应该使用$addToSet...

array('$addToSet' => array("done_by" => "2"))

此语句不会每次都添加 2,只会在第一次添加。


答案 2
$filter = array('_id'=>$id));
$update = array('$push'=>array('done_by'=>'2'));
$q->update($filter,$update);

推荐