mongodb - mongodb $or 总是返回 false (const)
问题描述
我创建了一个聚合管道来检索文档并添加一个新字段“过期”(布尔值),它的值基于字段“expireAt”(日期)
过期字段在以下情况下被认为是真的:
- expiredAt 缺失或为空或为空
- 过期时间<现在
这是我的审判:
{project:
expired: {
$not: {
$or: [{ expireAt: null }, { $gte: ['$expireAt', new Date()] }]
}
}
}
即使文档的 expireAt 值现在为 < 现在,此代码也总是给我 false
通过执行解释:
{ '$project': { _id: true, expireAt: true, expired: { '$cons
t': false } } }
查询结果:
- 注意 expireAt 字段和相应的过期值
今天是:27/11/2018
{过期:假},{过期:2019-07-15T17:18:11.000Z,过期:假},{过期:2017-07-16T17:18:11.000Z,过期:假},
也 {expireAt:{$exists:false}} 给出错误:MongoError: Unrecognized expression '$exists'at queryCallback
检查该字段是否存在的任何想法(无论其值为 null 与否)
解决方案
以下代码对我有用:
expired:{
$and: ['$expireAt', { $lt: ['$expireAt', new Date()] }]
}
推荐阅读
- google-cloud-platform - 从谷歌云上的存储桶下载文件
- python - 如何在 Python 中找到包含坐标的点的邻居?
- python - 如何使用范围列表索引 numpy 数组?
- google-pagespeed-insights-api - 如何使用 Google PageSpeed Insights API 测试移动设备
- docker - Docker-Compose 仅在存在时才绑定卷
- android - 使用导航架构组件Android导航到目标片段时屏幕白屏
- django - 我可以使用这种类型的视图限制带有干 yasg 的端点吗?
- c# - 如果 Token.WaitHandle.WaitOne 方法调用阻塞了线程,我们就不能在那个线程上做任何事情。那么我们如何使用它来取消呢?
- php - 如何为所有提交按钮设置特殊键
- wordpress - 本地主机工作但拒绝连接特定项目 (ERR_CONNECTION_REFUSE) (WAMP)