将mongoDB $ lookup与$ project

时间:2018-04-07 19:52:01

标签: php mongodb

现在我使用$ 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
                    ]
                ]
            ]
        ],

所以我可以过滤掉主集合中不必要的字段。我怎么能在子集合中做到这一点?

1 个答案:

答案 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
                ]
            ]
        ]
    ],