我有一个包含 endDateTime 字段的集合:
如果endDateTime
为null
,则操作尚未完成。
如果已完成,endDateTime
包含时间戳(Javascript Date.now()
)
如何查询尚未完成(endDateTime
为 null
)或在过去 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/