我有一个具有EndDateTime字段的集合:
如果endDateTimenull,则操作尚未完成。
如果已经完成,endDateTime包含时间戳(javascriptDate.now()
如何查询在过去24小时内尚未完成(endDateTimenull)或已结束的记录:

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

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

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

最佳答案

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

09-18 03:16