Javascript 方法,而不是$project,用于在$lookup和$unwind之后限制MongoDB视图中的数据

Javascript 方法,而不是$project,用于在$lookup和$unwind之后限制MongoDB视图中的数据,javascript,mongodb,aggregation-framework,Javascript,Mongodb,Aggregation Framework,我正在运行MongoDB 3.4版。在我的聚合管道中,如果我在管道的后期执行$lookup,然后执行$unwind,并且我想限制从该$lookup中显示的字段,则我只有两个选项1。)添加另一个$project,包括我希望为带有{“name”:1}的文档显示的所有数据etc,或者添加一个$project阶段,排除我不想要的所有数据{“name”:0},等等 我这样问是因为,无论哪种方式,这都给我留下了很多字段,可以专门包括,也可以排除。这就是为什么我想知道,在3.4版中,除了再次使用$projec

我正在运行MongoDB 3.4版。在我的聚合管道中,如果我在管道的后期执行
$lookup
,然后执行
$unwind
,并且我想限制从该
$lookup
中显示的字段,则我只有两个选项1。)添加另一个
$project
,包括我希望为带有
{“name”:1}的文档显示的所有数据
etc,或者添加一个
$project
阶段,排除我不想要的所有数据
{“name”:0}
,等等


我这样问是因为,无论哪种方式,这都给我留下了很多字段,可以专门包括,也可以排除。这就是为什么我想知道,在3.4版中,除了再次使用
$project
之外,是否还有其他选项允许我限制从那晚的
$lookup
$unwind
中出现的数据?

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

从3.6开始,您可以将与附加的
管道一起使用。但即使如此,您也必须在您加入的收藏中使用
$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
      }}
    ]
  }},
  // ...
])

请张贴您的查询以及