MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで特定のプロパティのみを更新するには?$addToSetの使い方を解説

MongoDBで特定のプロパティのみを更新する方法

MongoDBでドキュメントの特定のプロパティ(フィールド)だけを更新したい場合には、更新演算子「$addToSet」を使用します。$addToSetは配列に値を追加するための演算子で、同じ値がまだ存在しない場合にのみ要素を追加するという特徴を持っています。

まずは、サンプルとなるコレクションとドキュメントを作成しましょう。

> db.demo336.insertOne({"Name":"Chris","Score":[45,67,78]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e522cb1f8647eb59e562097")
}
> db.demo336.insertOne({"Name":"David","Score":[89,93,47]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e522cb2f8647eb59e562098")
}

作成したドキュメントの確認

find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。

> db.demo336.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e522cb1f8647eb59e562097"), "Name" : "Chris", "Score" : [ 45, 67, 78 ] }
{ "_id" : ObjectId("5e522cb2f8647eb59e562098"), "Name" : "David", "Score" : [ 89, 93, 47 ] }

$addToSetを使った更新クエリ

以下は、MongoDBで特定のプロパティのみを更新するクエリの例です。ここでは、「Name」が「David」であるドキュメントの「Score」配列に対して、新しい配列 [56,34,71] を追加しています。

> db.demo336.update({Name:"David"},{ $addToSet: {Score: [56,34,71] }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

WriteResultの「nModified : 1」と表示されていることから、1件のドキュメントが正常に更新されたことがわかります。

更新後の結果確認

もう一度find()メソッドを実行して、すべてのドキュメントを表示してみましょう。

> db.demo336.find();

更新後の出力は以下の通りです。

{ "_id" : ObjectId("5e522cb1f8647eb59e562097"), "Name" : "Chris", "Score" : [ 45, 67, 78 ] }
{ "_id" : ObjectId("5e522cb2f8647eb59e562098"), "Name" : "David", "Score" : [ 89, 93, 47, [ 56, 34, 71 ] ] }

まとめ

このように、$addToSetを使えば、ドキュメント全体を置き換えることなく、配列型のプロパティに新しい要素だけを安全に追加できます。ただし、出力結果を見ると分かるように、上記の例では [56,34,71] がネストされた配列として1つの要素に追加されている点に注意してください。もし個々の数値(56、34、71)をバラバラに追加したい場合は、「$addToSet」と「$each」修飾子を組み合わせて { $addToSet: { Score: { $each: [56,34,71] } } } のように記述します。用途に応じて使い分けることで、より柔軟なデータ更新が可能になります。

  1. MongoDBで特定のフィールド値のみを更新するクエリの書き方

    MongoDBでは、update()メソッドと$set演算子を組み合わせることで、ドキュメント全体を置き換えることなく、特定のフィールドの値だけを効率的に更新できます。本記事では、実際のコード例を通じて、その具体的な手順をわかりやすく解説します。 1. コレクションとドキュメントの作成 まずは例として、insertOne()メソッドを使って「demo557」というコレクションにドキュメントを挿入します。 > db.demo557.insertOne({Name:Chris}); { acknowledged : true, insertedId : ObjectId(5e8

  2. MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)

    MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って