1. ホーム
  2. mongodb

[解決済み】MongoDBのすべてのドキュメントのフィールド名を変更するにはどうすればよいですか?

2022-04-19 19:02:04

質問

MongoDBに5000レコードのコレクションがあり、それぞれが以下のような内容を含んでいると仮定する。

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

すべてのドキュメントで、フィールド名 "additional" を "last" に変更する簡単な方法はありますか?私は $rename 演算子がありますが、サブフィールドを指定する方法がよくわかりません。

どのように解決するのですか?

使用することができます。

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/