我如何在 mongodb 中使用 find () 并有条件地使用一个或另一个字段?
How do I use find () in mongodb with a conditional to use one field or another?
我必须 return 两个 dateTime 值之间的文档,或者如果 dateTime 字段不存在,则使用 createdAt 字段。
我正在使用这个查询:
{ dateTime: { $gte: 1554087600000, $lte: 1609431033000 } }
但有时dateTime字段不存在,所以在这种情况下,我必须使用createdAt字段。
如果我理解正确,您可以使用 $or
按一个或另一个值进行过滤,使用 $and
和 $exists
以确保查询将在 [=14= 处获取文档] 不存在:
如果指定的值介于 $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
我必须 return 两个 dateTime 值之间的文档,或者如果 dateTime 字段不存在,则使用 createdAt 字段。 我正在使用这个查询:
{ dateTime: { $gte: 1554087600000, $lte: 1609431033000 } }
但有时dateTime字段不存在,所以在这种情况下,我必须使用createdAt字段。
如果我理解正确,您可以使用 $or
按一个或另一个值进行过滤,使用 $and
和 $exists
以确保查询将在 [=14= 处获取文档] 不存在:
如果指定的值介于 $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