我有以下架构:

Collection1
  name
  slug
Collection2
  name
  slugCollection1


Collection1Collection2之间的“链接”通过字段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的字段部分。

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

最佳答案

当然,您可以使用$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 } } }
]

09-11 23:34