在当前文档中匹配数组

时间:2019-05-02 20:00:52

标签: mongodb aggregation-framework

在操作类似文档的聚合管道中

{
    "availablePackages": [
        {
            "title": "Silver",
            "code": "001",
        },
        {
            "title": "Gold",
            "code": "002",
        },
        {
            "title": "Platinum",
            "code": "003",
        },
    "selectedPackageCode": "002"
}

我需要将上述文档中的所有内容替换为代码与selectedPackageCode相匹配的软件包的标题。所以我想以

结尾
{
    "packageTitle": "Gold"
}

这不是查找,因为它在当前文档中。我以为我也许可以使用$let创建一个变量,然后使用$match找到正确的数组元素,但是我没有找到一种有效的语法。

1 个答案:

答案 0 :(得分:0)

您需要$filter来将availablePackagesselectedPackageCode$arrayElemAt进行匹配才能获得第一个匹配元素。为了使其处于一个聚合阶段,您可以使用$let定义临时变量:

db.col.aggregate([
    // ... other stages
    {
        $project: {
            packageTitle: {
                $let: {
                    vars: { 
                        selectedPackage: {
                            $arrayElemAt: [
                                { $filter: { input: "$availablePackages", cond: { $eq: [ "$$this.code", "$selectedPackageCode" ] } } }, 0
                            ]
                        } 
                    },
                    in: "$$selectedPackage.title"
                }
            }
        }
    }
])