在MongoDB集合中重命名数组内的属性

时间:2019-05-07 14:57:57

标签: mongodb

我想在一个MongoDB集合中重命名一个属性,因为它在单数形式处是复数形式。但是,当我在Mongo shell中尝试此操作时:

db.getCollection("customers").updateMany( { _id: {$exists: true} }, { $rename: { "billingOptions.0.paymentCards": "billingOptions.0.paymentCard" } } )

...我收到此“不能为数组元素”错误:

  

“ errmsg”:“源字段不能是数组元素,   带有_id的文档中的“ billingOptions.0.paymentCards”:   ObjectId('3d12fefc093r76146ccf50g8')具有一个称为的数组字段   'billingOptions'“

不知道为什么这会是一个问题,因为我正在准确地告诉它要定位的数组元素。但是,不管是哪种情况,我都可以使用什么操作来重命名此属性

这是当前文档相关部分的一个示例:

"billingOptions" : [
    {
        "method" : "private", 
        "paymentCards": {
            "deleted" : false,
            // other props
        }
    }, 
]

这就是我想要的样子:

"billingOptions" : [
    {
        "method" : "private", 
        "paymentCard": {
            "deleted" : false,
            // other props
        }
    }, 
]

请注意,“ billingOptions”是文档根目录上的一个属性。我要做的就是将“ paymentCards”的所有实例重命名为“ paymentCard”,因为它在这里是单个对象,而不是数组。

1 个答案:

答案 0 :(得分:1)

您需要$out替换现有集合,并需要$addFields$map替换每个文档中的现有数组

db.customers.aggregate([
    {
        $addFields: {
            billingOptions: {
                $map: {
                    input: "$billingOptions",
                    in: {
                        method: "$$this.method",
                        // other fields
                        paymentCard: "$$this.paymentCards"
                    }
                }
            }
        }
    },
    {
        $out: "$customers"
    }
])