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/