首页 > 解决方案 > 直接在字段的聚合上匹配/过滤

问题描述

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

这是我通常做的:

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

我更喜欢一次性的,比如:

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

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

标签: mongodbmongodb-queryaggregation-framework

解决方案


你可以findone condition

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

注意:测试3.6.5mongo GUI


推荐阅读