MongoDB - 将简单字段变成对象

Luk*_*tor 4 mongodb mongo-shell mongodb-query

在 MongoDB 中,我想更改文档的结构:

{
    discount: 10,
    discountType: "AMOUNT"
}
Run Code Online (Sandbox Code Playgroud)

到:

{
    discount: {
        value: 10,
        type: "AMOUNT"
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我在 mongo shell 中尝试了以下查询:

db.discounts.update({},
    {
        $rename: {
             discount: "discount.value",
             discountType: "discount.type"
        }
    },
    {multi: true}
)
Run Code Online (Sandbox Code Playgroud)

但它会抛出一个错误:

"writeError" : {
    "code" : 2,
    "errmsg" : "The source and target field for $rename must not be on the same path: discount: \"discount.value\""
}
Run Code Online (Sandbox Code Playgroud)

我想到的一个解决方法是分两步完成:首先将新结构分配给新字段(比方说discount2),然后将其重命名为discount. 但也许有一种方法可以一步完成?

Joh*_*yHK 5

最简单的方法是按照您在问题中提到的那样分两步进行;最初重命名discount为临时字段名称,以便可以在第二步中重用:

db.discounts.update({}, {$rename: {discount: 'temp'}}, {multi: true})
db.discounts.update({}, 
    {$rename: {temp: 'discount.value', discountType: 'discount.type'}},
    {multi: true})
Run Code Online (Sandbox Code Playgroud)