MongoDBで特定の文字列を含むドキュメントを抽出する方法($matchの使い方)
MongoDBで特定の文字列に一致するドキュメントを抽出したい場合は、集計パイプライン(aggregation pipeline)の$matchステージを使用します。この記事では、サンプルコレクションの作成から、$matchを使ったドキュメントの抽出方法まで、具体的な例を交えてわかりやすく解説します。
サンプルコレクションの作成
まず、insert()メソッドを使ってドキュメントを挿入し、コレクションを作成します。ここでは「demo424」というコレクションに、配列フィールド「Information」を持つ2つのドキュメントを登録します。
> db.demo424.insert(
... {
... "Information" : [
... {
... id:10,
... Name:"Chris"
... },
... {
... id:11,
... Name:"David"
... }
... ]
... }
... )
WriteResult({ "nInserted" : 1 })
>
> db.demo424.insert(
... {
... "Information" : [
... {
... id:101,
... Name:"Mike"
... },
... {
... id:102,
... Name:"John"
... }
... ]
... }
... )
WriteResult({ "nInserted" : 1 })
「WriteResult({ "nInserted" : 1 })」と表示されれば、ドキュメントが正常に挿入されたことを意味します。
find()メソッドで全ドキュメントを確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを一覧表示できます。
> db.demo424.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e74eb9dbbc41e36cc3cae6a"), "Information" : [ { "id" : 10, "Name" : "Chris" }, { "id" : 11, "Name" : "David" } ] }
{ "_id" : ObjectId("5e74eb9ebbc41e36cc3cae6b"), "Information" : [ { "id" : 101, "Name" : "Mike" }, { "id" : 102, "Name" : "John" } ] }$matchを使って特定の文字列に一致するドキュメントを抽出
次に、aggregate()メソッドと$matchステージを組み合わせて、「Information.Name」フィールドが「Chris」と一致するドキュメントを抽出します。
> db.demo424.aggregate(
... [ { $match : { "Information.Name": "Chris" } } ]
... );
実行結果は以下の通りです。
{ "_id" : ObjectId("5e74eb9dbbc41e36cc3cae6a"), "Information" : [ { "id" : 10, "Name" : "Chris" }, { "id" : 11, "Name" : "David" } ] }動作のポイント
$matchステージは、指定した条件に一致するドキュメントだけをパイプラインの次のステージへ渡すフィルターの役割を果たします。上記の例では、配列フィールド「Information」内のいずれかの要素の「Name」が「Chris」であれば、そのドキュメント全体が返されます。そのため、結果には同じ配列内の別要素「David」も含まれている点に注意してください。
なお、配列の中から条件に一致する要素だけを取り出したい場合は、$matchに加えて$projectや$filter演算子を組み合わせることで実現できます。条件に一致するドキュメントが1つも存在しない場合は、空の結果が返されます。
-
既存のMongoDBドキュメントにリストやオブジェクト型のフィールドを追加する方法
既存のMongoDBドキュメントに、オブジェクト型や配列(リスト)型など特定のデータ型を持つ新しいフィールドを追加したい場合、$set 演算子を使用します。$set は指定したフィールドが存在しない場合は新しく作成し、すでに存在する場合は値を更新してくれるため、フィールドの追加にも最適です。1. コレクションとドキュメントの作成まず、insertOne() メソッドを使ってサンプルのコレクションを作成します。> db.demo732.insertOne({_id:1,Language:"English"}); { "acknowledged" :
-
MongoDBドキュメントから特定の値をフィルタリングする方法
MongoDBドキュメントから特定の値をフィルタリングする方法MongoDBでドキュメント内の配列から特定の値を抽出したい場合は、集計パイプラインで $filter を使用します。この記事では、実際にコレクションを作成し、特定の条件に一致する要素だけをフィルタリングする手順を、サンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。 db.demo751.insertOne( ... { ... _id: 101, ... details: [