我有这样的文档结构:
{
"_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次修改,是否有更有效的方法来执行此操作。
答案 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你可以将它作为动态变量传递