过滤不存在​​字段的子文档

kam*_*rba 2 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}}
        ]
    }
   }
  }
 }
}
])
Run Code Online (Sandbox Code Playgroud)

但字段名称可能无法在过滤器中使用,因为我收到一个错误:invalid operator '$$version.delete'

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

Asy*_*sky 6

你想使用聚合语法检查销毁字段类型,比较它missing是什么$exists:false将是:

{$eq:[{$type:'$$version.delete'},"missing"]}
Run Code Online (Sandbox Code Playgroud)

  • 我只用了 2 个小时的谷歌搜索就找到了这个答案。GBless MongoDB 文档... (2认同)