javascript - Mongo 查询如果字段不存在。如果存在,则必须在一个范围内

标签 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小时前之前的寄存器。怎么解决?

最佳答案

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

关于javascript - Mongo 查询如果字段不存在。如果存在,则必须在一个范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55912195/

相关文章:

node.js - 如何使用 Mongoose 在 API 响应中包含虚拟字段?

javascript - 悬停效果在 IE 中不起作用

javascript - 在浏览器上保存数据(作为 JS 数组)是一件坏事吗?

javascript - 发现 meteor 取消订阅?

node.js - 在 MongoDB Server 3.0.15 上将 mongoose 版本从 3.8.22 升级到 4.3.2 后,findOneAndUpdate 不起作用

javascript - 为具有引用属性的模型构建 API

node.js - MongoDB 使用 Map/Reduce 将一个字段合并到现有集合中

javascript - 我如何保证我的魔方置乱算法不会连续两次选择相同的方向?

javascript - 如何在 contenteditable 元素(div)中设置插入符号(光标)位置?

javascript - 如何将 Mongoose 中的鉴别器连接到我的父文档?尝试导入数据时出错