javascript - 如果字段不存在,Mongo 查询。如果存在,必须在一个范围内
问题描述
我有一个包含 endDateTime 字段的集合:
如果endDateTime
是null
,则操作尚未完成。如果已完成,则endDateTime
包含时间戳(Javascript Date.now()
)
如何查询尚未完成 ( endDateTime
is 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
。如何解决?
解决方案
您可以将您的标准与$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 } }
]
})
推荐阅读
- python - 删除一列中的值等于另一列中的值的行
- vagrant - 具有多个隧道 ID 的 OvS VXLAN 隧道仅适用于一个隧道 ID
- excel - 如何将命名范围从一个工作簿复制到特定单元格中的另一个工作簿?
- c++ - 当用户键入 EXIT 并按 ENTER 时捕获控制台关闭事件
- angular - Angular Material VirtualScrollViewPort - 异步加载数据
- amazon-web-services - 我在尝试使用“AWS 传输到 SFTP”服务时收到“无法加载内容错误”
- jekyll - 如何使用 Windows 命令行构建 Jekyll 项目生产
- python - MultiIndex 表的多种格式化方法
- scala - Scala:点到直线的正交投影
- java - 在 Gradle 中测试失败,但在 Maven 中工作正常