查询在另一个集合中具有依赖元素的文档

时间:2016-11-17 18:13:38

标签: node.js mongodb mongodb-query aggregation-framework

我有以下架构:

Collection1
  name
  slug
Collection2
  name
  slugCollection1

Collection1Collection2之间的“链接”来自字段slugslugCollection1

我想创建一个查询,从Collection1返回带有新计算布尔属性的元素,该属性告诉Collection2中是否存在(或不存在)依赖元素。

为此,我创建了以下查询:

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

当两个集合中有很多元素甚至出现以下错误时,我就遇到了性能问题:

MongoError: Total size of documents in collection2 matching { slug: { $eq: "paymill" } } exceeds maximum document size

还有另一种方法来实现这样的请求吗?谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在$ lookup之前添加$ project阶段,这样您只能使用必填字段进行查找

      {
        "$project": {
          "name": 1,
          "slug": 1
      }
}