现在我使用$ project聚合来过滤掉不必要的字段。我还使用$ lookup聚合来链接两个集合,我知道如何在主集合中使用它们。 现在我的问题是;如何将这个$项目聚合放在查找中? 我现在拥有的是这样的:
[
'$lookup' => [
'from' => Media::collectionName(),
'localField' => '_id',
'foreignField' => 'project_id',
'as' => 'mediaList'
]
],
[
'$project' => [
'title' => 1,
'owner_id' => 1,
'owner_name' => 1,
'created_at' => 1,
'updated_at' => 1,
'status' => 1,
'discount' => 1,
'company' => 1,
'media' => [
'$filter' => [
'input' => '$mediaList',
'as' => 'media',
'cond' => $mediaFilter
]
]
]
],
所以我可以过滤掉主集合中不必要的字段。我怎么能在子集合中做到这一点?
答案 0 :(得分:0)
如果我理解你的问题,你想在$ mediaList字段上应用$ filter操作。
为了避免多余的$ project阶段(你必须声明要保留的每个字段),请使用$ addFields阶段,如下所示:
[
'$lookup' => [
'from' => Media::collectionName(),
'localField' => '_id',
'foreignField' => 'project_id',
'as' => 'media' // Note that I use the same name for the field
]
],
[
'$addFields' => [
'media' => [
'$filter' => [
'input' => '$media',
'as' => 'media',
'cond' => $mediaFilter
]
]
]
],