mongodb - mongodb:从日期之前的嵌套数组中提取元素
问题描述
我有一个被认为如此简单的问题。给定具有 expires 字段的嵌套文档。一个示例文档:
{
_id: ObjectId(),
stuff: [
{
name: 'egg',
expires: ISODate("2019-07-19T12:52:56.163Z")
},
{
name: 'potato',
expires: ISODate("2019-07-19T12:52:56.163Z")
}
]
}
我想我可以使用这样的查询:
db.collection.update({"_id": ObjectId("578411d30af77c226c52b940")}, {
"$pull": {
"stuff.expires": { "$lt": ISODate() }
}
});
可能能够一次将其应用于多个文档,但即使在尝试更新单个文档时,我也会遇到该错误:
不能使用(stuff.expires)的部分(expires)来遍历元素
我尝试了很多修改,但我无法找到一种方法来完成这项工作或类似的例子(在搜索 mongodb 的东西时这似乎很奇怪)。
如果无法一次更新多个文档,如果有办法在原子查询中从单个文档中删除所有过期项目,我会很高兴。该查询不需要与旧的 mongodb 版本一起使用 - 最新版本很好。
解决方案
我认为您可以使用此查询来实现您想要的:
db.collection.update({}, {
$pull: {
stuff: {
expires: {
$lt: ISODate()
}
}
}
}, {
multi: true
})
上面的查询将针对所有文档,并将拉出每个stuff
过期属性低于您ISODate()
的对象multi:true
是允许更新多个文档的选项
推荐阅读
- java - actionPerformed 函数中的 if/else 语句不起作用
- c# - (有效地)向 COM 互操作公开 OpenFileDialog 属性
- c# - 仅更新部分字符串并保持其余部分相同
- lua - '}' 预计在 '=' 程序附近
- certificate - 不能将 Mozilla 的 cert9.db 与 certutil.exe 一起使用
- apache - browser return %7Bhttp_host%D's ip could not found when redirecting to https
- c# - 括号中初始化的值是否会覆盖 C# 构造函数中设置的值?
- mysql - Error when foreign referencing in mySQL (Error 3780)
- apache-kafka - Kafka 消费者是在 poll() 上旋转还是被代理的广播/信号唤醒?
- git - GitHub has changes in my branch that I didn't do