直接在字段汇总上进行匹配/过滤

时间:2018-10-07 09:38:13

标签: mongodb mongodb-query aggregation-framework

在MongoDb聚合管道中,我经常遇到想要对成员字段的操作(即列表大小)进行过滤的情况。是否可以在一个操作中执行此操作,而不是先投影变量然后匹配?

这是我通常要做的:

[
  {
    "$project": {
      "vector_size": { "$size": "$VectorField" }
    }
  },
  {
    "$match": {
      "vector_size": { "$gte": 7 }
    }
  }
]

我希望一次性使用,例如:

[
  {
    "$match": {
      "VectorField": { "$size": { "$gte": 7 } }
    }
  }
]

但是对于该操作,$size需要一个整数,而不是另一个操作。 有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以在find中使用one condition

db.getCollection('your-collection').find( {"$expr":{
   "$gte":[
     {"$size":'$VectorField'},
     7
   ]
 }})

注意:在3.6.5的{​​{1}}中进行了测试