Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将元素插入MongoDB内部列表?_Mongodb_Mongodb Query - Fatal编程技术网

如何将元素插入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:[

我在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
将元素添加到“列表”的方法,但找不到将项目添加到特定“项目”列表的方法

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实现这一点?您可以演示如果项目包含另一个对象,并且我必须附加到该对象中的数组中,我如何实现这一点。