MongoDb:查询不从数组中提取项目 - 为什么?

时间:2013-07-25 10:49:54

标签: mongodb

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

2 个答案:

答案 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的答案,这比我的好。