假设我有以下架构:
"_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)
但问题是,它不是这样工作的.有什么建议?
这不是$ pullAll的工作方式.您不能指定匹配条件,您只能指定要删除的对象数组(需要完全匹配).
幸运的是,您可以使用$ pull(它接受匹配条件):
db.coll.update({
'_id': 1
},{
$pull : {
n.d : {
$lte : new Date(2000, 10, 11)
}
}
})
Run Code Online (Sandbox Code Playgroud)
请注意,$ pull还会拉出所有匹配的元素,而不仅仅是一个.
这无疑是有点令人困惑的.
| 归档时间: |
|
| 查看次数: |
3381 次 |
| 最近记录: |