MongoDB のすべてのドキュメントのフィールド名を変更するにはどうすればいいですか? 質問する

MongoDB のすべてのドキュメントのフィールド名を変更するにはどうすればいいですか? 質問する

MongoDB に 5000 件のレコードを含むコレクションがあり、各レコードに次のような内容が含まれているとします。

{
"occupation":"Doctor",
"name": {
   "first":"Jimmy",
   "additional":"Smith"
}

すべての文書で「追加」フィールドの名前を「最後」に変更する簡単な方法はありますか?$名前変更ドキュメントには演算子が記載されていますが、サブフィールドを指定する方法があまりよくわかりません。

ベストアンサー1

以下を使用できます:

db.foo.update({}, {
    $rename: {
        "name.additional": "name.last"
    }
}, false, true);

または、プロパティを含むドキュメントを更新するだけの場合:

db.foo.update({
    "name.additional": {
        $exists: true
    }
}, {
    $rename: {
        "name.additional": "name.last"
    }
}, false, true);

false, true上記の方法の は次のとおりです。すべてのレコードを更新するには が{ upsert:false, multi:true }必要です。multi:true

または、前者の方法を使用することもできます。

remap = function (x) {
    if (x.additional) {
        db.foo.update({
            _id: x._id
        }, {
            $set: {
                "name.last": x.name.additional
            }, $unset: {
                "name.additional": 1
            }
        });
    }
}
    
db.foo.find().forEach(remap);

MongoDB 3.2では、

db.students.updateMany({}, { 
    $rename: { 
        "oldname": "newname" 
    } 
})

一般的な構文は

db.collection.updateMany(filter, update, options)

https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/

おすすめ記事