以下查询的目的是从locs数组中提取项目,其中x = 2且y = 9。但是,在此查询之后,具有这些值的项目仍保留在数组中。
db.myCollection.update(
{ }, //All records
{ $pull: { 'locs' : { $elemMatch : {'x' : 2 , 'y' : 9 } } } }
)
有谁可以告诉我为什么它不起作用?
编辑:示例文档:
{
"_id" : ObjectId("55555555555"),
"locs" : [{
"x" : 2,
"y" : 9
}],
"v" : 99
}
答案 0 :(得分:3)
通常,$pull
不能像这样工作。它删除“数组中的值”(http://docs.mongodb.org/manual/reference/operator/pull/)。你不能在这里使用$elemMatch
,但你也不能这样做。
因此,如果您的文档如下所示:
{
'title': 'example',
'locs': [
{ x: 2, y: 12 },
{ x: 7, y: 9 },
{ x: 2, y: 9 },
]
}
以下内容应删除您的x:2 / y:9值对:
db.so.update(
{},
{ $pull: { 'locs' : { 'x' : 2 , 'y' : 9 } } }
);
然后有:
{
'title': 'example',
'locs': [
{ x: 2, y: 12 },
{ x: 7, y: 9 },
]
}
答案 1 :(得分:2)
我相信你不需要使用$elemMatch
。尝试以下,它应该工作:
db.myCollection.update({}, {$pull: {'locs' : {'x' : 2 , 'y' : 9}}})
编辑:或者@ Derick的答案,这比我的好。