mongodb从数组中拉出所有元素

时间:2011-12-22 02:05:08

标签: mongodb

假设我有以下架构:

"_id" : 1,
  "n" : [{
      "a" : ObjectId("4ef0ca414653b7c866040000"),
      "d" : new Date("Thu, 22 Dec 2011 04:53:56 GMT +04:00")
    }, {
      "a" : ObjectId("4ef0ca414653b9c866040000"),
      "d" : new Date("Thu, 22 Dec 2011 04:54:11 GMT +04:00")
    }, {
      "a" : ObjectId("4ef0ca424653b9c866040000"),
      "d" : new Date("Thu, 22 Dec 2011 04:54:30 GMT +04:00"),
   }]

我需要删除所有n,其中d小于特定日期。

所以我想我可以通过以下方式做到这一点:

db.coll.update({
'_id': 1
},{
 $pullAll : {
  n.d : {
     $lte : new Date(2000, 10, 11)
   }
 }
})

但问题是,它不是这样工作的。 有什么建议吗?

1 个答案:

答案 0 :(得分:7)

这不是$ pullAll的工作原理。您不能指定匹配条件,您只能指定要删除的对象数组(需要完全匹配)。

幸运的是,您可以使用$ pull(它接受匹配条件):

db.coll.update({
'_id': 1
},{
 $pull : {
  n.d : {
     $lte : new Date(2000, 10, 11)
   }
 }
})

请注意,$ pull还会提取匹配的所有元素,而不只是一个。

这是admittedly a little confusing