mongodb从数组中拉出所有元素

Sal*_*ali 2 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"),
   }]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Thi*_*ilo 7

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

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

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

请注意,$ pull还会拉出所有匹配的元素,而不仅仅是一个.

这无疑是有点令人困惑的.