4

下面查询的目的是从 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
}
4

2 回答 2

7

一般来说,$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 },
    ]
}
于 2013-07-25T10:56:47.393 回答
2

我相信你不必使用$elemMatch. 尝试以下方法,它应该可以工作:

db.myCollection.update({}, {$pull: {'locs' : {'x' : 2 , 'y' : 9}}})

编辑:或@Derick 的回答,这比我的要好。

于 2013-07-25T10:59:58.097 回答