mongoDB ドキュメント(レコード)のプロパティ名を変更する

mongoDB ドキュメント(レコード)のプロパティ名を変更する

mongoDBで、ドキュメント(レコード)のプロパティ名を変更する手順を記述してます。「db.コレクション名.updateOne()」で最初に見つかった値を「db.コレクション名.updateMany()」で全て変更可能です。「db.コレクション名.update()」は「6」ではとなってます。

環境

  • OS CentOS Stream release 9
  • MongoDB 6.0.2

手順

ドキュメント(レコード)のプロパティ名を変更するには、
「db.コレクション名.updateOne()」か「db.コレクション名.updateMany()」を使用します。
※「db.コレクション名.update()」は「6」では非推奨となります。

実際にデータを作成してアップデートしてみます。

test> db.foo.insertMany([{ "name" : "itiro", "age" : 10, "gender" : "m" },
... { "name" : "jiro", "age" : 20, "gender" : "m" },
... { "name" : "saburo", "age" : 30, "gender" : "m" },
... { "name" : "jiro", "age" : 25, "gender" : "f" },
... { "name" : "jiro", "age" : 30, "gender" : "x" },
... ]);
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("636233b77c4cb89d6c5c570f"),
    '1': ObjectId("636233b77c4cb89d6c5c5710"),
    '2': ObjectId("636233b77c4cb89d6c5c5711"),
    '3': ObjectId("636233b77c4cb89d6c5c5712"),
    '4': ObjectId("636233b77c4cb89d6c5c5713")
  }
}

「name」が「jiro」である最初のものの「age」を「chage」に変更してみます。

> db.foo.updateOne( { name:'jiro' }, { $rename:{ age: "chage" } } )
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

変更されていることが確認できます。

> db.foo.find()
[
  {
    _id: ObjectId("636233b77c4cb89d6c5c570f"),
    name: 'itiro',
    age: 10,
    gender: 'm'
  },
  {
    _id: ObjectId("636233b77c4cb89d6c5c5710"),
    name: 'jiro',
    gender: 'm',
    chage: 20
  },
  <省略>
]

全て更新する場合は「updateMany」を使用します。

> db.foo.updateMany( { name:'jiro' }, { $rename:{ age: "chage" } } )
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 3,
  modifiedCount: 2,
  upsertedCount: 0
}
test> db.foo.find()
[
  {
    _id: ObjectId("636233b77c4cb89d6c5c570f"),
    name: 'itiro',
    age: 10,
    gender: 'm'
  },
  {
    _id: ObjectId("636233b77c4cb89d6c5c5710"),
    name: 'jiro',
    gender: 'm',
    chage: 20
  },
  {
    _id: ObjectId("636233b77c4cb89d6c5c5711"),
    name: 'saburo',
    age: 30,
    gender: 'm'
  },
  {
    _id: ObjectId("636233b77c4cb89d6c5c5712"),
    name: 'jiro',
    gender: 'f',
    chage: 25
  },
  {
    _id: ObjectId("636233b77c4cb89d6c5c5713"),
    name: 'jiro',
    gender: 'x',
    chage: 30
  }
]

mongoDb5

環境

  • OS Ubuntu 20.04
  • MongoDB 5.0.5

mongoDb5では、ドキュメント(レコード)のプロパティ名を変更するには、「db.コレクション名.update()」を使用します。

db.コレクション名.update({ プロパティを指定 }, { $rename:{ 変更するプロパティ : 変更語のプロパティ })

実際に、以下のデータベース「hoge」にある「foo」というコレクション(テーブル)のドキュメント(レコード)のプロパティを変更してみます。

> use hoge

> db.foo.find()

{ "_id" : ObjectId("61b17ec1cf8b8f769c13688b"), "name" : "itiro", "age" : 10, "gender" : "m" }
{ "_id" : ObjectId("61b17ec5cf8b8f769c13688c"), "name" : "jiro", "age" : 20, "gender" : "m" }
{ "_id" : ObjectId("61b17ec9cf8b8f769c13688d"), "name" : "saburo", "age" : 30, "gender" : "m" }
{ "_id" : ObjectId("61b17ecdcf8b8f769c13688e"), "name" : "jiro", "age" : 25, "gender" : "f" }
{ "_id" : ObjectId("61b17ed0cf8b8f769c13688f"), "name" : "jiro", "age" : 30, "gender" : "x" }

プロパティ「name」が「jiro」である最初のものの「age」を「chage」に変更します。

>  db.foo.update( { name:'jiro' }, { $rename:{ age: "chage" } } )

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

変更されていることが確認できます。

> db.foo.find()

{ "_id" : ObjectId("61b17ec1cf8b8f769c13688b"), "name" : "itiro", "age" : 10, "gender" : "m" }
{ "_id" : ObjectId("61b17ec5cf8b8f769c13688c"), "name" : "jiro", "gender" : "m", "chage" : 30 }
{ "_id" : ObjectId("61b17ec9cf8b8f769c13688d"), "name" : "saburo", "age" : 30, "gender" : "m" }
{ "_id" : ObjectId("61b17ecdcf8b8f769c13688e"), "name" : "jiro", "age" : 25, "gender" : "f" }
{ "_id" : ObjectId("61b17ed0cf8b8f769c13688f"), "name" : "jiro", "age" : 30, "gender" : "x" }

全て変更する場合は、第4引数に「true」を指定します。
※第3引数を「true」にすると、指定したプロパティがなければデータが挿入されます。

> db.foo.update( { name:'jiro' }, { $rename:{ age: "chage" } },false,true )

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 })

2件、更新されていることが確認できます。

> db.foo.find()

{ "_id" : ObjectId("61b17ec1cf8b8f769c13688b"), "name" : "itiro", "age" : 10, "gender" : "m" }
{ "_id" : ObjectId("61b17ec5cf8b8f769c13688c"), "name" : "jiro", "gender" : "m", "chage" : 30 }
{ "_id" : ObjectId("61b17ec9cf8b8f769c13688d"), "name" : "saburo", "age" : 30, "gender" : "m" }
{ "_id" : ObjectId("61b17ecdcf8b8f769c13688e"), "name" : "jiro", "gender" : "f", "chage" : 25 }
{ "_id" : ObjectId("61b17ed0cf8b8f769c13688f"), "name" : "jiro", "gender" : "x", "chage" : 30 }

もしくは、「multi」を使用しても複数更新可能です。

> db.foo.update( { name:'jiro' }, { $rename:{ chage: "age" } }, { multi:true } )

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })