我在MongoDB中存储了以下文档:

{
    name: 'myDoc',
    list: [
        {
            id:1
            items:[
                {id:1, name:'item1'},
                {id:2, name:'item2'}
            ]
        },
        {
            id:2
            items:[
                {id:1, name:'item1'},
                {id:3, name:'item3'}
            ]
        }
    ]
}

我找到了一种方法,可以使用$addToSet将一个元素添加到"列表"中,但我找不到方法将一个项目添加到特定的"项目"列表中.

例如

{id:5, name:'item5'} 

我想把它添加到列表中id为2的元素项中.

推荐答案

一种方法是使用$push:

db.col.update(
    { name: 'doc', 'list.id': 2 }, 
    {$push: {'list.$.items': {id: 5, name: 'item5'}}}
)

http://docs.mongodb.org/manual/reference/operator/push/

你也可以用其他操作符替换$push,比如(可能)$addToSet,以得到你想要的确切结果.

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

查找/查找单个深度嵌套文档的多个集合

从MongoDB中的嵌套数组中提取找到的值及其索引

数组过滤器 MongoDB

Golang 无法在 MongoDB 中创建文档

在 ExpirePolicy 之后从 Store 中删除元素

Mongodb,在一个查询中用正则表达式更新部分字符串

Mongodb聚合查找异常值

Mongodb聚合查找连接两个对象字段的集合数组匹配对象索引字段的总和

嵌套数组 $unwind 和 $group 在 mongoDB 中重新组合在一起

使用 $addFields 将字段添加到 $lookup 结果中的每个项目

没有mongoose 的 Express 和 MongoDB

如何使用 Node.js 和 mongoose 解决command find requires authentication?

Node.js MongoDB Upsert 更新

MongoDB:在集合上设置 TTL 索引时出错: sessions

是否有支持 MongoDB 和 Devise 的 Rails 管理界面?

mongoose:按字母顺序排序

MongoDB备份计划

如何使用 mongoose 连接到 mongoDB Atlas

如何使用 Spring 的 MongoTemplate 和 Query 类检索字段子集?