Javascript 方法,而不是$project,用于在$lookup和$unwind之后限制MongoDB视图中的数据
我正在运行MongoDB 3.4版。在我的聚合管道中,如果我在管道的后期执行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
$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
}}
]
}},
// ...
])
请张贴您的查询以及