我创建了一个聚合管道来检索文档并添加一个新字段“ expired”(布尔值),其值基于字段“ expireAt”(日期)
如果满足以下条件,则过期字段被视为真
:这是我的审判
{project:
expired: {
$not: {
$or: [{ expireAt: null }, { $gte: ['$expireAt', new Date()] }]
}
}
}
即使文档具有expireAt值,此代码也总是给我错误,现在是
通过执行解释:
{ '$project': { _id: true, expireAt: true, expired: { '$cons
t': false } } }
查询结果:
今天是:27/11/2018
{已过期:false}, {expireAt:2019-07-15T17:18:11.000Z,expired:false}, {expireAt:2017-07-16T17:18:11.000Z,过期:false},
还{expireAt:{$ exists:false}}给出错误: MongoError:在queryCallback上无法识别的表达式'$ exists'
任何检查字段是否存在的想法(天气值是否为空)
答案 0 :(得分:0)
使用
$cond
运算符来实现
以下查询可帮助您:
我在字段中使用了
date
。
db.getCollection('chat').aggregate([
{
$project: {
'date': 1,
"expired": {
$cond: {
if: { $gte: ['$date', new Date()] },
then: false,
else: true
}
}
}
}
])
使用$or
db.getCollection('chat').aggregate(
[
{
$project:
{
date: 1,
expired: { $or: [ { $lt: [ "$date", new Date() ] }, { $eq: [ "$date", null ] } ] }
}
}
]
)
答案 1 :(得分:0)
以下代码与我合作:
expired:{
$and: ['$expireAt', { $lt: ['$expireAt', new Date()] }]
}