【问题标题】:Mongo query if field does not exist. If exists, must be within a range如果字段不存在,Mongo 查询。如果存在,必须在一个范围内
【发布时间】:2019-09-18 14:23:22
【问题描述】:

我有一个包含 endDateTime 字段的集合:

如果endDateTimenull,则操作尚未完成。 如果完成,endDateTime 包含时间戳(Javascript Date.now()

如何查询尚未完成(endDateTimenull)或过去 24 小时内已结束的记录:

   let endDateTime = Date.now();
   let startDateTime = endDateTime - 24 * 60 * 60 * 1000;

   query.endDateTime = {
             $or: [
                   null,
                   { $and: [{ $gte: startDateTime }, { $lte: endDateTime }] }
                  ]
    };

我的查询返回24 hours ago 之前的寄存器。如何解决?

【问题讨论】:

    标签: javascript mongodb mongoose mongodb-query


    【解决方案1】:

    您可以将您的条件与$or 结合起来:

    db.col.find({
        $or: [
            { endDateTime: null },
            { endDateTime: { $gt: Date.now() - 24 * 60 * 60 * 1000 } } 
        ]
    })
    

    或者如果您的某些文档中没有endDateTime 键,那么您需要$exists 运算符:

    db.col.find({
        $or: [
            { endDateTime: { $exists: false } },
            { endDateTime: { $gt: Date.now() - 24 * 60 * 60 * 1000 } } 
        ]
    })
    

    【讨论】:

    • startDateTime参数呢?
    • @Mendes 问题是您是否真的需要它?这意味着你有一些未来的日期
    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 2018-12-02
    • 2012-03-23
    • 1970-01-01
    • 2012-06-20
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多