MongoDBでドキュメントの配列に新しい要素を追加・更新する方法
MongoDBで配列に新しい要素を追加したい場合は、$push 演算子を使用します。$push は、指定したフィールド(配列)の末尾に値を追加するための更新演算子です。
まず、以下のクエリを実行して、ドキュメントを含むコレクションを作成しましょう。
> db.updateDemo.insertOne({"StudentName":"Larry","StudentCoreSubject":["Java","C"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c98ba78330fd0aa0d2fe4c9")
}
> db.updateDemo.insertOne({"StudentName":"Robert","StudentCoreSubject":["C++","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c98ba8b330fd0aa0d2fe4ca")
}
> db.updateDemo.insertOne({"StudentName":"Chris","StudentCoreSubject":["Python"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c98ba9b330fd0aa0d2fe4cb")
}続いて、find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.updateDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5c98ba78330fd0aa0d2fe4c9"),
"StudentName" : "Larry",
"StudentCoreSubject" : [
"Java",
"C"
]
}
{
"_id" : ObjectId("5c98ba8b330fd0aa0d2fe4ca"),
"StudentName" : "Robert",
"StudentCoreSubject" : [
"C++",
"MongoDB"
]
}
{
"_id" : ObjectId("5c98ba9b330fd0aa0d2fe4cb"),
"StudentName" : "Chris",
"StudentCoreSubject" : [
"Python"
]
}$push演算子で配列に要素を追加する
配列に新しい要素を追加するクエリは以下の通りです。update() メソッドの第1引数で対象ドキュメントを特定し、第2引数で $push を使って追加する値を指定します。
> db.updateDemo.update( { _id:ObjectId("5c98ba78330fd0aa0d2fe4c9") }, { $push: { "StudentCoreSubject": "MySQL" } });
Updated 1 existing record(s) in 2ms
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果の nModified : 1 は、1件のドキュメントが正常に更新されたことを示しています。
更新結果の確認
要素が配列に正しく挿入されたかどうかを確認してみましょう。
> db.updateDemo.find().pretty();
次の出力を見ると、ID 5c98ba78330fd0aa0d2fe4c9 のドキュメントに対して、文字列「MySQL」が正常に挿入されていることがわかります。
{
"_id" : ObjectId("5c98ba78330fd0aa0d2fe4c9"),
"StudentName" : "Larry",
"StudentCoreSubject" : [
"Java",
"C",
"MySQL"
]
}
{
"_id" : ObjectId("5c98ba8b330fd0aa0d2fe4ca"),
"StudentName" : "Robert",
"StudentCoreSubject" : [
"C++",
"MongoDB"
]
}
{
"_id" : ObjectId("5c98ba9b330fd0aa0d2fe4cb"),
"StudentName" : "Chris",
"StudentCoreSubject" : [
"Python"
]
}補足:重複を避けたい場合は$addToSetを使う
$push は同じ値がすでに配列内に存在していても、そのまま追加してしまう点に注意してください。重複する要素を追加したくない場合は、代わりに $addToSet 演算子を使用すると、配列内に値が存在しない場合のみ追加されます。
> db.updateDemo.update( { _id:ObjectId("5c98ba78330fd0aa0d2fe4c9") }, { $addToSet: { "StudentCoreSubject": "MySQL" } });このように、$push と $addToSet を使い分けることで、配列の更新を柔軟かつ安全に行うことができます。
-
MongoDBでforEach()を使って特定の学生の点数を更新する方法
MongoDBでforEach()を使ってドキュメント内の点数を更新するこの記事では、forEach()メソッドを使ってコレクション内のドキュメントを走査し、学生名が「David」のドキュメントを見つけて、その学生の点数(Marks)を新しい値に更新する方法を解説します。1. コレクションとドキュメントを作成するまず、insertOne()メソッドを使ってサンプル用のコレクションにドキュメントを作成しましょう。> db.demo634.insertOne({Name:Chris,Marks:76}); { acknowledged : true, insertedId :
-
MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)
MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr