【问题标题】: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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      相关资源
      最近更新 更多