MongoDBでサーバーレコードを含むコレクションのステータスを非アクティブに更新する方法
MongoDBでサーバーのステータスを非アクティブに更新する方法
サーバーレコードを含むMongoDBコレクションでは、配列形式で保存されたサーバー情報の中から特定のサーバーだけを探し出し、そのステータスを「Active(アクティブ)」から「Inactive(非アクティブ)」へ変更したいケースがあります。この記事では、位置指定演算子「$」を使って、配列内の条件に一致した要素だけを効率的に更新する手順を解説します。
1. コレクションの作成とドキュメントの挿入
まず、insertOne()メソッドを使って、サーバー情報(serverInformation)を配列として持つドキュメントを挿入し、コレクションを作成します。
> db.demo707.insertOne(
{
id:101,
"serverInformation":
[
{
"IP":"192.56.34.3",
"Status":"Active"
},
{
"IP":"192.56.36.4",
"Status":"Inactive"
}
]
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea6f852551299a9f98c93c8")
}2. 挿入したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo707.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ea6f852551299a9f98c93c8"), "id" : 101, "serverInformation" : [ { "IP" : "192.56.34.3", "Status" : "Active" }, { "IP" : "192.56.36.4", "Status" : "Inactive" } ] }現時点では、IPアドレス「192.56.34.3」のサーバーだけが「Active」になっていることがわかります。
3. アクティブなサーバーを非アクティブに変更する
以下が、特定のIPアドレスに一致するサーバーのステータスを「Inactive」に更新するクエリです。update()の検索条件でIPアドレスを指定し、更新演算子$setと組み合わせて位置指定演算子「$」を使うことで、条件に一致した配列要素だけをピンポイントで更新できます。
> db.demo707.update({"serverInformation.IP":"192.56.34.3"},{$set:{"serverInformation.$.Status":"Inactive"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果の「nMatched : 1」「nModified : 1」は、1件のドキュメントが条件に一致し、正常に更新されたことを示しています。なお、新しいバージョンのMongoDBでは、単一ドキュメントの更新にはupdateOne()、複数ドキュメントの一括更新にはupdateMany()の使用が推奨されています。
4. 更新結果の確認
もう一度find()メソッドを実行して、更新後の状態を確認しましょう。
> db.demo707.find();
実行すると、次のような出力になります。
{ "_id" : ObjectId("5ea6f852551299a9f98c93c8"), "id" : 101, "serverInformation" : [ { "IP" : "192.56.34.3", "Status" : "Inactive" }, { "IP" : "192.56.36.4", "Status" : "Inactive" } ] }これで、IPアドレス「192.56.34.3」のサーバーのステータスが「Active」から「Inactive」に正しく変更されました。
まとめ
配列内のネストされたフィールドを更新する場合は、「配列フィールド名.対象プロパティ」で検索条件を指定し、$setと位置指定演算子「$」を組み合わせるのが基本です。このテクニックは、サーバー管理や監視システムなど、配列データを扱うさまざまな場面で応用できるので、ぜひ覚えておきましょう。
-
Node.jsからMongoDBに接続する方法!mongodb.connect()の使い方を徹底解説
Node.jsとMongoDBを接続するには Node.jsアプリケーションからMongoDBサーバーに接続する際は、公式の「mongodb」ドライバ(モジュール)が提供する connect() メソッドを使用します。このメソッドは非同期で動作し、接続の成否はコールバック関数またはPromiseを通じて受け取ることができます。 mongodb.connect() の構文 mongodb.connect(path[, callback]) パラメータ path – 接続先MongoDBサーバーのパスです。ホスト名とポート番号を含むURI形式で指定します。 callback – 接続処理の
-
MySQLでENUM型のステータスから「Active」のレコードを抽出する方法
MySQLでは、ENUM型のカラムに格納された特定の値(例:「Active」)を持つレコードを簡単に抽出できます。この記事では、ENUM型でステータスを管理するテーブルを作成し、「Active」ステータスのレコードだけを取得する具体的な手順を解説します。 1. ENUM型を使ったテーブルの作成 まず、ステータスをENUM型として定義したテーブルを作成します。ENUM型は、あらかじめ指定した文字列のリストの中から1つの値のみを格納できる便利なデータ型です。 mysql> create table DemoTable2037 -> ( &