繁体   English   中英

MongoDB 聚合 - 动态“$addField”

[英]MongoDB Aggregation - Dynamic `$addField`

我有以下格式为_id: userID的 object 和 Mongoose 查询:

const obj = {
    111: "222",
    333: "444",
    555: "666"
};

Model.aggregate([
    {
        $addFields: {
            userID: ???
        }
    }
]);

我需要一种基于 object 向每个文档添加userID字段的方法。假设该集合具有以下数据:

[
    {
        _id: "111",
        ...
    },
    {
        _id: "333",
        ...
    },
    {
        _id: "555",
        ...
    }
]

该文档最终应如下所示:

[
    {
        _id: "111",
        userID: "222",
        ...
    },
    {
        _id: "333",
        userID: "444",
        ...
    },
    {
        _id: "555",
        userID: "666",
        ...
    }
]

我怎样才能做到这一点?

您需要从$ objectToArray 开始,以获取动态 object 作为键和值的数组。 然后你可以使用$filter来查找匹配对,使用$arrayElemAt来获取单个元素:

db.collection.aggregate([
    {
        $addFields: {
            userId: {
                $let: {
                    vars: { 
                        match: { 
                            $arrayElemAt: [ 
                                { 
                                    $filter: { 
                                        input: { $objectToArray: {  111: "222", 333: "444", 555: "666" } }, 
                                        cond: { $eq: [ "$$this.k", { $toString: "$_id" } ] }
                                    } 
                                },
                                0 
                            ] 
                        }
                    },
                    in: "$$match.v"
                }
            }
        }
    }
])

蒙戈游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM