除$ project外,在$ lookup和$ unwind之后限制MongoDB视图数据的方法

时间:2018-07-06 18:29:55

标签: javascript mongodb aggregation-framework

我正在运行MongoDB 3.4版。在我的聚合管道中,如果我在管道中进行了$lookup之后是$unwind的操作,并且我想限制从$lookup出现的字段,这是我仅有的两个选择或者1.)添加另一个$project,包括我想用{ "name" : 1 }为该文档显示的所有数据,或者添加一个$project阶段排除我不想要的数据{ "name" : 0 },等等?

我之所以问是因为,无论哪种方式,都给我留下了很多要专门包含或排除的字段。因此,在3.4版中,我想知道是否还有其他选择可以限制我从$lookup$unwind开始出现的数据,而不是再次使用$project

1 个答案:

答案 0 :(得分:1)

否,除了使用$project手动排除或包含字段外,3.4中没有此类选项。只要它不会膨胀超过BSON限制,就不会有问题。

从3.6开始,您可以将new variant of $lookup stage与附加的pipeline一起使用。但是即使如此,您也必须在要加入的集合上使用$project

db.collectionx.aggregate([
  // ...
  {$lookup: {
    from: 'collectiony',
    let: {field: '$field'},
    as: 'y',
    pipeline: [
      {$match: {$expr: {$eq: ['$field', '$$field']}}},
      {$project: {
        fieldA: 0,
        fieldB: 0,
        fieldC: 0
      }}
    ]
  }},
  // ...
])