如何将元素插入MongoDB内部列表?
我在MongoDB中存储了以下文档:如何将元素插入MongoDB内部列表?,mongodb,mongodb-query,Mongodb,Mongodb Query,我在MongoDB中存储了以下文档: { name: 'myDoc', list: [ { id:1 items:[ {id:1, name:'item1'}, {id:2, name:'item2'} ] }, { id:2 items:[
{
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
将元素添加到“列表”的方法,但找不到将项目添加到特定“项目”列表的方法
e、 g。
我得到以下信息:
{id:5, name:'item5'}
我想将它添加到列表中id为2的元素项中。一种方法是使用
$push
:
db.col.update(
{ name: 'doc', 'list.id': 2 },
{$push: {'list.$.items': {id: 5, name: 'item5'}}}
)
您还可以使用其他操作符(可能)替换$push
,如$addToSet
,以获得所需的准确结果。您可以使用以下操作:-
> var toInsert = {id: 5, name: 'item6'}
> db.abc.update(
{ name: 'myDoc', list: { $elemMatch: { id: 2 } } },
{ $addToSet: { 'list.$.items': toInsert } }
)
查询
部分将从列表
数组中找到id为2的文档。然后我们使用$
位置元素在该数组索引处添加一个新元素
看
您还可以将
list:{$elemMatch:{id:2}}
替换为'list.id':2
但是,当您希望基于数组的多个元素进行更新时,使用将更好。例如,当您的匹配条件是id
,而数组中的另一个字段是length
:-
list: {$elemMatch: {id: 2, length: 5}}
脚注:带有嵌套嵌入数组的模式几乎总是会在以后引起问题,因为当前的查询语言不可能对较低级别的元素进行所有操作。我会避免它。我如何使用JPAcan中的mongorepository实现这一点?您可以演示如果项目包含另一个对象,并且我必须附加到该对象中的数组中,我如何实现这一点。