我在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
向'list'添加元素的方法,但我找不到添加到项目的“项目”列表的方法。
e.g。 我得到以下内容:
{id:5, name:'item5'}
我希望将它添加到列表中元素的项目,ID为:
答案 0 :(得分:47)
这样做的一种方法是使用$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
,以获得您要查找的确切结果。
答案 1 :(得分:13)
您可以使用: -
> var toInsert = {id: 5, name: 'item6'}
> db.abc.update(
{ name: 'myDoc', list: { $elemMatch: { id: 2 } } },
{ $addToSet: { 'list.$.items': toInsert } }
)
query
部分会在list
数组中找到id = 2
的文档。然后我们使用$
位置元素在该数组索引处添加一个新元素。
您也可以仅使用list: {$elemMatch: {id: 2}}
替换'list.id': 2
。
但是当您想要根据数组的多个元素进行更新时,使用$elemMatch
会更好。例如,当您的匹配条件为id
且数组中的其他字段为length
时: -
list: {$elemMatch: {id: 2, length: 5}}