我想在一个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”,因为它在这里是单个对象,而不是数组。
答案 0 :(得分:1)
您需要$out替换现有集合,并需要$addFields用$map替换每个文档中的现有数组
db.customers.aggregate([
{
$addFields: {
billingOptions: {
$map: {
input: "$billingOptions",
in: {
method: "$$this.method",
// other fields
paymentCard: "$$this.paymentCards"
}
}
}
}
},
{
$out: "$customers"
}
])