MongoDBで複数のドキュメントフィールドを完全一致検索するクエリの書き方
MongoDBで複数のフィールドを完全一致させる方法
MongoDBで複数のドキュメントフィールドに対して完全一致の条件を指定してレコードを取得したい場合は、$and演算子と$in演算子を組み合わせます。$in演算子の中に、マッチさせたい値の配列を設定することで、柔軟な完全一致検索が可能になります。
ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を見ていきましょう。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。
> db.demo422.insertOne({"Name":"Chris","Marks":34});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e73a4059822da45b30346e1")
}
> db.demo422.insertOne({"Name":"Chris","Marks":56});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e73a40a9822da45b30346e2")
}
> db.demo422.insertOne({"Name":"David","Marks":78});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e73a4149822da45b30346e3")
}
> db.demo422.insertOne({"Name":"Sam","Marks":45});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e73a41e9822da45b30346e4")
}
> db.demo422.insertOne({"Name":"David","Marks":89});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e73a4239822da45b30346e5")
}
2. コレクション内の全ドキュメントを確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo422.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e73a4059822da45b30346e1"), "Name" : "Chris", "Marks" : 34 }
{ "_id" : ObjectId("5e73a40a9822da45b30346e2"), "Name" : "Chris", "Marks" : 56 }
{ "_id" : ObjectId("5e73a4149822da45b30346e3"), "Name" : "David", "Marks" : 78 }
{ "_id" : ObjectId("5e73a41e9822da45b30346e4"), "Name" : "Sam", "Marks" : 45 }
{ "_id" : ObjectId("5e73a4239822da45b30346e5"), "Name" : "David", "Marks" : 89 }
3. 複数フィールドでの完全一致クエリを実行
それでは、「Name」フィールドと「Marks」フィールドの両方に対して完全一致条件を指定し、該当するレコードだけを抽出してみましょう。
> db.demo422.find({'$and': [{'Name': {'$in': ['Chris', 'David']}, 'Marks': {'$in': [34,89]}}]});
このクエリでは、$andによって「Name」が「Chris」または「David」であること、かつ「Marks」が「34」または「89」であるという両方の条件を満たすドキュメントのみが取得されます。
実行結果は以下の通りです。
{ "_id" : ObjectId("5e73a4059822da45b30346e1"), "Name" : "Chris", "Marks" : 34 }
{ "_id" : ObjectId("5e73a4239822da45b30346e5"), "Name" : "David", "Marks" : 89 }
このように、$in演算子で各フィールドの候補値を配列として指定し、$andで組み合わせることで、複数のドキュメントフィールドにまたがる完全一致検索を簡単に実現できます。条件が単一フィールドのみの場合は$andを省略できますが、複数フィールドを扱う際には明示的に記述することで、意図が明確になり可読性も向上します。
-
MongoDBのfind()で特定のフィールドを除外して取得する方法
MongoDBのfind()クエリで不要なフィールドを除外する基本構文MongoDBでは、find()メソッドの第2引数に射影(プロジェクション)を指定することで、結果から表示したくないフィールドを除外できます。除外したいフィールドには 0 を設定します。以下が基本の構文です。ここでは「yourFieldName1」と「yourFieldName2」という2つのフィールドを除外しています。db.yourCollectionName.find(yourQuery, {yourFieldName1: 0, yourFieldName2: 0});サンプルコレクションの作成実際に動作を確認するため、
-
MongoDBのfind()クエリでネストされたドキュメントを取得する方法
MongoDBでネストされたドキュメント(入れ子になったサブドキュメントや配列内のオブジェクト)から値を取得するには、「ドット表記(dot notation)」を使用します。この記事では、サンプルコレクションを作成し、find()クエリを使ってネストされたデータを検索する具体的な手順を解説します。 サンプルコレクションの作成 まず、insert()メソッドを使ってドキュメントを含むコレクションを作成しましょう。 > db.demo591.insert([ ... { "Name": "John", "Age": 23 },