在MongoDB Collection中将属性重命名



我想在我们的一个集合中重命名属性,因为它在应该是单数的地方对其进行了多元化。但是,当我在Mongo Shell中尝试此操作时:

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

...我得到这个"不能是数组元素"错误:

" errmsg":"源字段不能是数组元素, doc中的'BillingOptions.0.PaymentCards'with _id: ObjectID('3D12FEFC093R76146CCF50G8'(有一个数组字段称为 'BillingOptions'"

不确定为什么这是一个问题,因为我准确地告诉它要定位哪个数组元素。但是,无论哪种方式,我都可以使用什么操作来重命名此属性

以下是文档相关部分的一个示例:

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

这就是我想像的那样:

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

请注意," BillingOptions"是文档根源上的属性。我要做的就是将所有"支付卡"的实例重命名为" PaymayCard",因为它是这里的一个单数对象,而不是数组。

您需要$ out来替换现有集合和$ addfields用$地图替换每个文档中的现有数组

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

相关内容

  • 没有找到相关文章

最新更新