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

但什么都没发生,有人知道怎么做吗?

推荐答案

因为这两个答案都没有告诉你这里出了什么问题...

$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"and"2"...

问题是...

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

This should have a => not a ,

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

但是,请注意,每次运行该程序时,它都会插入另一个"2",如果您希望MongoDB只插入"2",如果它在"done_by"中不存在,那么您应该使用$addToSet...

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

这句话不会每次加2,只是第一次.

Mongodb相关问答推荐

如何在MongoDB中使用Aggregation来计算两个键相同但字段不同的对象数组的总值,并将其合并为一个?

MongoDB聚合 - 用另一个数组过滤数组

Mongoose $push 不断添加两个条目

用 Redis 查询?

使用 mgo 存储嵌套 struct

通过 Spring Boot 应用程序访问 mongodb 时的身份验证错误

将 mongoose 字符串模式类型默认值设为空白并使该字段可选

Golang/mgo:如何让 MongoDB 在字段中使用当前时间?

MongoDB 存储 ObjectId 的数组

有没有办法将python对象直接存储在mongoDB中而不序列化它们

如何从 node.js 以编程方式执行 mongodump 命令?

majority和 linearizable的区别

当前的 URL 字符串解析器已弃用

如何使用 MongoDB Compass 对数据进行排序

具有 AWS 云形成和自动zoom 的 Mongodb 集群

判断 mongoDB 是否连接

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

在 MongoDB 中快速搜索数十亿个小文档的策略

MongoDb 聚合 $match 错误:Arguments must be aggregate pipeline operators

MongoDb - 利用多 CPU 服务器进行写入繁重的应用程序