mongoDB 複数のドキュメント(レコード)を一括更新する
mongoDBで、複数のドキュメント(レコード)を一括更新する手順を記述してます。「update」はmongo6では非推奨となったため「updateMany」と「updateOne」を使用します。
環境
- OS CentOS Stream release 9
- MongoDB 6.0.2
手順
複数のドキュメント(レコード)を一括更新するには、「db.コレクション名.updateMany()」を使用します。
db.コレクション名.updateMany({ プロパティを指定 }, { $set:{ プロパティ : 値 })
実際に、以下のデータベース「hoge」にある「foo」というコレクション(テーブル)のドキュメント(レコード)を一括で更新してみます。
> use hoge
> db.foo.find()
[
{
_id: ObjectId("6368bdabcbd6720d0fb92c32"),
name: 'itiro',
age: 10,
gender: 'm'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c33"),
name: 'jiro',
age: 20,
gender: 'm'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c34"),
name: 'saburo',
age: 30,
gender: 'm'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c35"),
name: 'jiro',
age: 25,
gender: 'f'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c36"),
name: 'jiro',
age: 30,
gender: 'x'
}
]
プロパティ「name」が「jiro」であるものの「age」を全て「50」に変更します。
> db.foo.updateMany( { name:'jiro' }, { $set:{ age: 50 } } )
{
acknowledged: true,
insertedId: null,
matchedCount: 3,
modifiedCount: 3,
upsertedCount: 0
}
変更されていることが確認できます。
> db.foo.find()
[
{
_id: ObjectId("6368bdabcbd6720d0fb92c32"),
name: 'itiro',
age: 10,
gender: 'm'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c33"),
name: 'jiro',
age: 50,
gender: 'm'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c34"),
name: 'saburo',
age: 30,
gender: 'm'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c35"),
name: 'jiro',
age: 50,
gender: 'f'
},
{
_id: ObjectId("6368bdabcbd6720d0fb92c36"),
name: 'jiro',
age: 50,
gender: 'x'
}
]
「updateOne」を使用すると、一番最初に見つかったものだけ更新されます。
> db.foo.updateOne( { name:'jiro' }, { $set:{ age: 55 } } )
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
> db.foo.find()
[
{
_id: ObjectId("6368be3dcbd6720d0fb92c37"),
name: 'itiro',
age: 10,
gender: 'm'
},
{
_id: ObjectId("6368be3dcbd6720d0fb92c38"),
name: 'jiro',
age: 55,
gender: 'm'
},
{
_id: ObjectId("6368be3dcbd6720d0fb92c39"),
name: 'saburo',
age: 30,
gender: 'm'
},
{
_id: ObjectId("6368be3dcbd6720d0fb92c3a"),
name: 'jiro',
age: 50,
gender: 'f'
},
{
_id: ObjectId("6368be3dcbd6720d0fb92c3b"),
name: 'jiro',
age: 50,
gender: 'x'
}
]
mongoDB5
環境
- OS Ubuntu 20.04
- MongoDB 5.0.5
mongoDB5では、「db.コレクション名.update()」に「{ multi:true}」を使用します。
db.コレクション名.update({ プロパティを指定 }, { $set:{ プロパティ : 値 }, { multi:true })
実際に、以下のデータベース「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」を全て「50」に変更します。
> db.foo.update( { name:'jiro' }, { $set:{ age: 50 } }, { multi:true } )
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
変更されていることが確認できます。
> db.foo.find()
{ "_id" : ObjectId("61b17ec1cf8b8f769c13688b"), "name" : "itiro", "age" : 10, "gender" : "m" }
{ "_id" : ObjectId("61b17ec5cf8b8f769c13688c"), "name" : "jiro", "gender" : "m", "age" : 50 }
{ "_id" : ObjectId("61b17ec9cf8b8f769c13688d"), "name" : "saburo", "age" : 30, "gender" : "m" }
{ "_id" : ObjectId("61b17ecdcf8b8f769c13688e"), "name" : "jiro", "gender" : "f", "age" : 50 }
{ "_id" : ObjectId("61b17ed0cf8b8f769c13688f"), "name" : "jiro", "gender" : "x", "age" : 50 }
「false」を指定した場合、もしくは何も指定しなければ、一番最初に見つかったものだけ更新されます。
> db.foo.update( { name:'jiro' }, { $set:{ age: 55 } }, { multi:false } )
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", "age" : 55 }
{ "_id" : ObjectId("61b17ec9cf8b8f769c13688d"), "name" : "saburo", "age" : 30, "gender" : "m" }
{ "_id" : ObjectId("61b17ecdcf8b8f769c13688e"), "name" : "jiro", "gender" : "f", "age" : 50 }
{ "_id" : ObjectId("61b17ed0cf8b8f769c13688f"), "name" : "jiro", "gender" : "x", "age" : 50 }
-
前の記事
SourceTree プルを行うショートカットキー 2022.09.27
-
次の記事
mongoDB ドキュメント(レコード)のプロパティ名を変更する 2022.09.27
コメントを書く