如何更新/删除MongoDB嵌套数组

时间:2016-06-24 08:50:10

标签: javascript arrays mongodb

我有这样的文档结构:

{

    "_id" : "1234",           
    "name" : "foo",  
    "bar" : [  
        {"some0":"value0"},  
        {"some1":"value1"},           
        {"some2":"value2"}
    ]   
}

我只想删除嵌套"栏中的对象"数组由其在数组中的索引,例如我有一个像[0,2]这样的索引数组,它应该删除" some0"和" some2"来自阵列。

我知道,Mongo目前无法以原子方式删除其索引值,通常使用this代替:

db.lists.update({}, {$unset : {"bar.0" : 1 }}) 
db.lists.update({}, {$pull : {"bar" : null}})

问题: 如果要删除索引的数组变得非常大(> 100)而不是手动循环它们并为每个变量执行2次修改,是否有更有效的方法来执行此操作。

2 个答案:

答案 0 :(得分:0)

没有直接的数组索引拉/删的方法。事实上,这是一个悬而未决的问题http://jira.mongodb.org/browse/SERVER-1014,您可以投票支持它。

你所写的唯一方法是正确的 db.lists.update({},{$ unset:{“bar.0”:1}}) db.lists.update({},{$ pull:{“bar”:null}})

答案 1 :(得分:0)

您可以使用positional $运算符标识数组中的元素进行更新,而无需显式指定数组中元素的位置

db.lists.update({'bar.some0':'value0'}, {$unset : {"bar.$" : 1 }}) 

some0,some1你可以将它作为动态变量传递