过滤字段不存在的子文档

时间:2018-01-18 13:21:52

标签: mongodb mongodb-query aggregation-framework

我有一些对象集合,其中每个对象都包含一些版本,其中一些版本具有删除字段,并且希望过滤那些未删除或晚于给定时间戳的文件。

db
.getCollection('test')
.aggregate([
{$project:
 {versions:
  {$filter:
   {input: '$versions',
    as: 'version',
    cond:
    {
        $or: [
        {$gte: ['$$version.delete', 3]},
        {'$$version.delete': {$exists: false}}
        ]
    }
   }
  }
 }
}
])

但是字段名可能无法在过滤器中使用,因为我收到错误:无效的运算符'$$ version.delete'

任何想法这个查询的正确语法是什么?

1 个答案:

答案 0 :(得分:1)

您希望使用聚合语法来检查删除字段的类型,并将其与missing进行比较$exists:false

{$eq:[{$type:'$$version.delete'},"missing"]}