假设我有以下架构:
"_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)
}
}
})
但问题是,它不是这样工作的。 有什么建议吗?
答案 0 :(得分:7)
这不是$ pullAll的工作原理。您不能指定匹配条件,您只能指定要删除的对象数组(需要完全匹配)。
幸运的是,您可以使用$ pull(它接受匹配条件):
db.coll.update({
'_id': 1
},{
$pull : {
n.d : {
$lte : new Date(2000, 10, 11)
}
}
})
请注意,$ pull还会提取匹配的所有元素,而不只是一个。