我如何在 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