首页 > 解决方案 > 如果字段不存在,Mongo 查询。如果存在,必须在一个范围内

问题描述

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

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

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

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

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

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

标签: javascriptmongodbmongoosemongodb-query

解决方案


您可以将您的标准与$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 } } 
    ]
})

推荐阅读