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

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

MongoDBでドキュメントを更新する際には、update()メソッドを使用します。カスタム変数を作成して利用するための基本構文は以下のとおりです。

var anyVariableName = yourValue;
db.yourCollectionName.update({filter}, {$set: {yourFieldName: anyVariableName}});

まず変数を宣言して値を代入し、その変数を$set演算子の中で参照することで、柔軟にフィールドを更新できるのがポイントです。

サンプルコレクションの作成

それでは、実際に動きを確認するために、ドキュメントを含むコレクションを作成しましょう。

> db.demo600.insertOne({id:1,Name:"Robert"});
{
   "acknowledged" : true, "insertedId" : ObjectId("5e94a063f5f1e70e134e2699")
}
> db.demo600.insertOne({id:2,Name:"Mike"});
{
   "acknowledged" : true, "insertedId" : ObjectId("5e94a06bf5f1e70e134e269a")
}
> db.demo600.insertOne({id:3,Name:"Sam"});
{
   "acknowledged" : true, "insertedId" : ObjectId("5e94a072f5f1e70e134e269b")
}

登録済みドキュメントの確認

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

> db.demo600.find();

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

{ "_id" : ObjectId("5e94a063f5f1e70e134e2699"), "id" : 1, "Name" : "Robert" }
{ "_id" : ObjectId("5e94a06bf5f1e70e134e269a"), "id" : 2, "Name" : "Mike" }
{ "_id" : ObjectId("5e94a072f5f1e70e134e269b"), "id" : 3, "Name" : "Sam" }

カスタム変数を使った更新クエリの実行

MongoDBドキュメントの更新時にカスタム変数を使用するクエリは、次のように記述します。

> var replaceName="David";
> db.demo600.update({id:2},{$set:{Name:replaceName}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

この例では、変数replaceNameに「David」という値を代入し、それを$set演算子経由でNameフィールドに適用しています。実行結果から、1件のドキュメントが条件にマッチし、1件が正常に更新されたことがわかります。

更新結果の確認

改めてfind()メソッドですべてのドキュメントを表示して、更新が反映されているか確認しましょう。

> db.demo600.find();

出力結果:

{ "_id" : ObjectId("5e94a063f5f1e70e134e2699"), "id" : 1, "Name" : "Robert" }
{ "_id" : ObjectId("5e94a06bf5f1e70e134e269a"), "id" : 2, "Name" : "David" }
{ "_id" : ObjectId("5e94a072f5f1e70e134e269b"), "id" : 3, "Name" : "Sam" }

idが2のドキュメントのNameフィールドが「Mike」から「David」に書き換えられていることが確認できます。このように、シェル上で変数を定義しておけば、更新値を動的に扱え、スクリプトの再利用性も高まります。

補足:新しいバージョンでの推奨メソッド

MongoDBの比較的新しいバージョンでは、update()は非推奨(deprecated)となっており、単一ドキュメントの更新にはupdateOne()、複数ドキュメントの一括更新にはupdateMany()の使用が推奨されています。カスタム変数の使い方はまったく同じで、以下のように記述できます。

> var replaceName="David";
> db.demo600.updateOne({id:2},{$set:{Name:replaceName}});
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1 }

用途に応じて適切なメソッドを選択することで、より安全で意図の明確な更新処理を実装できます。

  1. C#のdo...whileループの使い方を徹底解説!構文とサンプルコード付き

    C#におけるdo...whileループは、条件の判定をループの最後で行う繰り返し処理です。一般的なwhileループとよく似ていますが、最大の違いは「条件に関係なく、必ず最低1回はループ本体が実行される」という点です。 do...whileループの基本構文 do...whileループを作成するには、次のように記述します。 do { statement(s); } while( condition ); 条件式(condition)がループの末尾に置かれているため、プログラムの流れとしては以下のようになります。 まず、ループ内のステートメント(statement)が無条件に1回実行される

  2. AppSignalカスタムメトリック入門:Gauge・Counter・Distributionの使い方

    カスタムメトリックで、より深いインサイトをAppSignalのgemでは、以前からカスタム計測(インストゥルメンテーション)を利用して、アプリケーションパフォーマンスに関する詳細な情報を取得できました。しかし、パフォーマンス以外の指標も追跡したいケースは少なくありません。gemのバージョン1.0のリリースにより、AppSignalへカスタムメトリックを送信できるようになりました。新規アカウント数からデータベースのディスク使用量まで、アプリケーション内のあらゆるデータを追跡できます。カスタムメトリックはコード計測の代わりとなるものではなく、コード内の特定のデータをより扱いやすくし、時系列で測定可