我想在我们的一个集合中重命名属性,因为它在应该是单数的地方对其进行了多元化。但是,当我在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"
}
])