Mongo查询字段是否不存在。如果存在,则必须在一定范围内

时间:2019-04-29 23:55:50

标签: javascript mongodb mongoose mongodb-query

我有一个具有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之前的寄存器。如何解决?

1 个答案:

答案 0 :(得分:2)

您可以将标准与​​$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 } } 
    ]
})
相关问题