我正在运行MongoDB 3.4版。在我的聚合管道中,如果我在管道中进行了$lookup
之后是$unwind
的操作,并且我想限制从$lookup
出现的字段,这是我仅有的两个选择或者1.)添加另一个$project
,包括我想用{ "name" : 1 }
为该文档显示的所有数据,或者添加一个$project
阶段排除我不想要的数据{ "name" : 0 }
,等等?
我之所以问是因为,无论哪种方式,都给我留下了很多要专门包含或排除的字段。因此,在3.4版中,我想知道是否还有其他选择可以限制我从$lookup
和$unwind
开始出现的数据,而不是再次使用$project
?
答案 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
}}
]
}},
// ...
])