【问题标题】:How do I use find () in mongodb with a conditional to use one field or another?如何在 mongodb 中使用 find () 并有条件地使用一个字段或另一个字段?
【发布时间】:2023-03-11 01:51:01
【问题描述】:
我必须返回两个 dateTime 值之间的文档,或者如果 dateTime 字段不存在,则使用 createdAt 字段。
我正在使用这个查询:
{ dateTime: { $gte: 1554087600000, $lte: 1609431033000 } }
但有时 dateTime 字段不存在,所以在这种情况下,我必须使用 createdAt 字段。
【问题讨论】:
标签:
database
mongodb
mongo-shell
【解决方案1】:
如果我理解正确,您可以使用$or 按一个或另一个值进行过滤,并使用$and 和$exists 来确保查询将在dateTime 不存在的情况下获取文档:
如果指定了$gte 和$lte,则此查询将获得dateTime 值,或者将获得dateTime 不存在且createdAt 字段与条件$gte/$lte 匹配的文档.
db.collection.find({
"$or": [
{
"dateTime": {"$gte": 1,"$lte": 2}
},
{
"$and": [
{"dateTime": {"$exists": false},},
{"createdAt": {"$gte": 1,"$lte": 2}}
]
}
]
})
例如here