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

MongoDBでドキュメントを更新する際の条件付きアップサート(複数挿入)の実装方法

bulkWrite()で複数の書き込み操作を実行する

MongoDBで複数の書き込み操作を一度にまとめて実行したい場合は、bulkWrite()メソッドを使用します。このメソッドを利用すると、更新(updateOne)と挿入(insertOne)など、異なる種類の操作を1回のリクエストとしてサーバーへ送信できるため、効率的なデータ操作が可能になります。

コレクションへのドキュメント作成

まずは、以下のコマンドで「demo428」コレクションにドキュメントを挿入してみましょう。

> db.demo428.insertOne({ "Name" : "Chris", "Age" : 21 });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75f428bbc41e36cc3cae83")
}
> db.demo428.insertOne({ "Name" : "Chris", "Age" : 23 });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75f429bbc41e36cc3cae84")
}
> db.demo428.insertOne({ "Name" : "David", "Age" : 22 });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75f42abbc41e36cc3cae85")
}
> db.demo428.insertOne({ "Name" : "David", "Age" : 21 });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75f42abbc41e36cc3cae86")
}

挿入したドキュメントの確認

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

> db.demo428.find();

このクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e75f428bbc41e36cc3cae83"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e75f429bbc41e36cc3cae84"), "Name" : "Chris", "Age" : 23 }
{ "_id" : ObjectId("5e75f42abbc41e36cc3cae85"), "Name" : "David", "Age" : 22 }
{ "_id" : ObjectId("5e75f42abbc41e36cc3cae86"), "Name" : "David", "Age" : 21 }

条件付きアップサート(挿入)の実行

続いて、MongoDBでドキュメントを更新する際に、条件に応じたアップサートや挿入を行うクエリを見ていきましょう。以下の例では、bulkWrite()の中でupdateOneinsertOneを組み合わせています。また、"ordered": falseオプションを指定することで、各操作が互いに独立して処理されます。

> db.demo428.bulkWrite(
...    [
...       { "updateOne": {
...          "filter": { "Name": "David", "Age": 22 },
...          "update": { "$set": { "Info": {Name:"John"} } }
...       }},
...       { "insertOne": {
...          "document": { "Name": "Carol", "Age": 22, "Info": {Name:"John"}}
...       }}
...    ],
...    { "ordered": false }
... )
{
   "acknowledged" : true,
   "deletedCount" : 0,
   "insertedCount" : 1,
   "matchedCount" : 1,
   "upsertedCount" : 0,
   "insertedIds" : {
      "1" : ObjectId("5e75f448bbc41e36cc3cae87")
   },
   "upsertedIds" : {
   }
}

このクエリでは、まず「Name」が「David」かつ「Age」が「22」であるドキュメントを検索し、そのドキュメントに対して「Info」フィールドを設定する更新操作を実行しています。同時に、「Carol」という新しいドキュメントの挿入も行っています。結果を見ると、1件のドキュメントが一致し(matchedCount: 1)、1件の新しいドキュメントが挿入されたこと(insertedCount: 1)がわかります。

更新後のドキュメント確認

もう一度find()メソッドを実行して、コレクション内のすべてのドキュメントを確認してみましょう。

> db.demo428.find();

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

{ "_id" : ObjectId("5e75f428bbc41e36cc3cae83"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e75f429bbc41e36cc3cae84"), "Name" : "Chris", "Age" : 23 }
{ "_id" : ObjectId("5e75f42abbc41e36cc3cae85"), "Name" : "David", "Age" : 22, "Info" : { "Name" : "John" } }
{ "_id" : ObjectId("5e75f42abbc41e36cc3cae86"), "Name" : "David", "Age" : 21 }
{ "_id" : ObjectId("5e75f448bbc41e36cc3cae87"), "Name" : "Carol", "Age" : 22, "Info" : { "Name" : "John" } }

出力を確認すると、「David(Age: 22)」のドキュメントには「Info」フィールドが追加され、さらに新しいドキュメント「Carol」も挿入されていることがわかります。このようにbulkWrite()を活用すれば、条件に基づいた更新と新規挿入を柔軟に組み合わせることができます。

  1. MongoDBでドキュメント更新時にカスタム変数を使用する方法

    MongoDBでドキュメントを更新する際には、update()メソッドを使用します。カスタム変数を作成して利用するための基本構文は以下のとおりです。 var anyVariableName = yourValue; db.yourCollectionName.update({filter}, {$set: {yourFieldName: anyVariableName}}); まず変数を宣言して値を代入し、その変数を$set演算子の中で参照することで、柔軟にフィールドを更新できるのがポイントです。 サンプルコレクションの作成 それでは、実際に動きを確認するために、ドキュメントを含むコレクショ

  2. JavaでMongoDBコレクションに複数のドキュメントを挿入する方法

    MongoDBでは、insertMany()メソッドを使用することで、既存のコレクションに複数のドキュメントを一度に挿入できます。本記事では、シェルからの基本的な操作方法と、Javaプログラムから実行する手順を解説します。 基本構文 db.coll.insert(docArray) 各要素の意味は以下のとおりです。 db:データベース名 coll:ドキュメントを挿入するコレクション名 docArray:挿入したいドキュメントの配列 シェルでの実行例 > use myDatabase switched to db myDatabase > db.sampleCollection.