我有一些对象集合,其中每个对象都包含一些版本,其中一些版本具有删除字段,并且希望过滤那些未删除或晚于给定时间戳的文件。
db
.getCollection('test')
.aggregate([
{$project:
{versions:
{$filter:
{input: '$versions',
as: 'version',
cond:
{
$or: [
{$gte: ['$$version.delete', 3]},
{'$$version.delete': {$exists: false}}
]
}
}
}
}
}
])
但是字段名可能无法在过滤器中使用,因为我收到错误:无效的运算符'$$ version.delete'
任何想法这个查询的正确语法是什么?
答案 0 :(得分:1)
您希望使用聚合语法来检查删除字段的类型,并将其与missing
进行比较$exists:false
:
{$eq:[{$type:'$$version.delete'},"missing"]}