2016-11-10 18 views
1

我有以下模式相匹配:查询的文档,其中依赖阵列大小的值

Collection1 
    name 
    slug 
Collection2 
    name 
    slugCollection1 

“链接”和Collection2之间Collection1是通过字段slugslugCollection1

我尝试使用MongoDB的聚合框架实现一个请求,以获取Collection1的所有元素,该元素具有Collection2类型的相关元素的特定名称和数量。

我可以得到提示借力$project

[ 
    { 
    "$lookup": { 
     "from": "Collection2", 
     "localField": "slug", 
     "foreignField": "slugCollection1", 
     "as": "elements" 
    } 
    }, 
    { 
    "$project": { 
     "_id": 0, 
     "id": "$id", 
     "name": 1, 
     "slug": 1, 
     "elementsNumber": { 
     "$size": "$elements" 
     } 
    } 
    } 
] 

但我不能使用elementsNumber场到$match后。我想这是因为它不是Collection1的字段部分。

有没有一种方法来实现这样的查询? 谢谢!

+1

是什么让你说你不能使用'$比赛中新的字段'elementsNumber' '管道?当然这是可能的; '{“$ match”:{“elementsNumber”:{“$ gt”:3}}}'例如... – chridam

+1

非常感谢@chridam的提示!在调查了更多这个问题之后,我发现我使用了一个数字而不是整数作为标准。切换到整数解决了问题!你对这种能力的暗示帮助了我。如果你想发布答案,我会接受它;-) –

回答

2

当然你也可以使用一个$match管道与给定的标准来筛选文件:

[ 
    { 
     "$lookup": { 
      "from": "Collection2", 
      "localField": "slug", 
      "foreignField": "slugCollection1", 
      "as": "elements" 
     } 
    }, 
    { 
     "$project": { 
      "_id": 0, 
      "id": "$id", 
      "name": 1, 
      "slug": 1, 
      "elementsNumber": { "$size": "$elements" } 
     } 
    }, 
    { "$match": { "elementsNumber": { "$gt": 3 } } } 
]