mongoDB ドキュメント(レコード)が存在すれば更新してなければ追加する

mongoDBで、ドキュメント(レコード)が存在すれば更新してなければ追加する手順を記述してます。「update()」に「{ upsert:true }」を指定することで追加することができます。
環境
- OS CentOS Stream release 9
- MongoDB 6.0.2
手順
ドキュメント(レコード)が存在すれば更新してなければ追加するには、「db.コレクション名.update()」に「{ upsert:true }」を使用します。
db.コレクション名.update({ プロパティを指定 }, { $set:{ プロパティ : 値 }, { upsert:true })
実際に、以下のデータベース「hoge」にある「foo」というコレクション(テーブル)のドキュメント(レコード)を更新または追加してみます。
> use hoge
> db.foo.find()
[
{
_id: ObjectId("63610fd98efd8fe165bf1b24"),
name: 'itiro',
age: 10,
gender: 'm'
},
{
_id: ObjectId("63610ff18efd8fe165bf1b25"),
name: 'jiro',
gender: 'm',
age: 55
},
{
_id: ObjectId("636110088efd8fe165bf1b26"),
name: 'jiro',
gender: 'm',
age: 55
},
{
_id: ObjectId("636110088efd8fe165bf1b27"),
name: 'saburo',
age: 30,
gender: 'm'
},
{
_id: ObjectId("636110088efd8fe165bf1b28"),
name: 'jiro',
gender: 'f',
age: 50
},
{
_id: ObjectId("6361100a8efd8fe165bf1b29"),
name: 'jiro',
gender: 'x',
age: 50
}
]
プロパティ「name」が存在しない「siro」を追加します。
> db.foo.update( { name:'siro' }, { $set:{ gender:"m",age: 55 } }, { upsert:true } )
{
acknowledged: true,
insertedId: ObjectId("6361103e79ade7bbe662a24e"),
matchedCount: 0,
modifiedCount: 0,
upsertedCount: 1
}
追加されていることが確認できます。
> db.foo.find()
[
<省略>
{
_id: ObjectId("6361100a8efd8fe165bf1b29"),
name: 'jiro',
gender: 'x',
age: 50
},
{
_id: ObjectId("6361103e79ade7bbe662a24e"),
name: 'siro',
age: 55,
gender: 'm'
}
]
存在する「jiro」を指定すると、最初のものだけ更新されます。
> db.foo.update( { name:'jiro' }, { $set:{ gender:"x",age: 35 } }, { upsert:true } )
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
> db.foo.find()
[
{
_id: ObjectId("63610fd98efd8fe165bf1b24"),
name: 'itiro',
age: 10,
gender: 'm'
},
{
_id: ObjectId("63610ff18efd8fe165bf1b25"),
name: 'jiro',
gender: 'x',
age: 35
},
{
_id: ObjectId("636110088efd8fe165bf1b26"),
name: 'jiro',
gender: 'm',
age: 55
},
{
_id: ObjectId("636110088efd8fe165bf1b27"),
name: 'saburo',
age: 30,
gender: 'm'
},
{
_id: ObjectId("636110088efd8fe165bf1b28"),
name: 'jiro',
gender: 'f',
age: 50
},
{
_id: ObjectId("6361100a8efd8fe165bf1b29"),
name: 'jiro',
gender: 'x',
age: 50
},
{
_id: ObjectId("6361103e79ade7bbe662a24e"),
name: 'siro',
age: 55,
gender: 'm'
}
]
存在したものを全て更新する場合は「multi:true」も指定します。
> db.foo.update( { name:'jiro' }, { $set:{ gender:"x",age: 35 } }, { upsert:true, multi:true } )
{
acknowledged: true,
insertedId: null,
matchedCount: 4,
modifiedCount: 3,
upsertedCount: 0
}
> db.foo.find()
[
{
_id: ObjectId("63610fd98efd8fe165bf1b24"),
name: 'itiro',
age: 10,
gender: 'm'
},
{
_id: ObjectId("63610ff18efd8fe165bf1b25"),
name: 'jiro',
gender: 'x',
age: 35
},
{
_id: ObjectId("636110088efd8fe165bf1b26"),
name: 'jiro',
gender: 'x',
age: 35
},
{
_id: ObjectId("636110088efd8fe165bf1b27"),
name: 'saburo',
age: 30,
gender: 'm'
},
{
_id: ObjectId("636110088efd8fe165bf1b28"),
name: 'jiro',
gender: 'x',
age: 35
},
{
_id: ObjectId("6361100a8efd8fe165bf1b29"),
name: 'jiro',
gender: 'x',
age: 35
},
{
_id: ObjectId("6361103e79ade7bbe662a24e"),
name: 'siro',
age: 55,
gender: 'm'
}
]
-
前の記事
GAS 実行を行うショートカットキー 2022.11.08
-
次の記事
java 三項演算子を使用してif文を1行で記述する 2022.11.08
コメントを書く