MongoDBでリスト内の値(オブジェクト以外)をクエリする方法
リスト(配列)内の値をクエリするには、MongoDBの位置演算子($)を使用します。位置演算子は、クエリ条件に一致した配列の要素だけを取得したい場合に非常に便利です。まずは、ドキュメントを含むコレクションを作成しましょう。
> db.demo628.insertOne({id:1,Name:["Chris","David","John"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e9ae7ea6c954c74be91e6b6")
}
> db.demo628.insertOne({id:1,Name:["Carol","Sam"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e9ae7f26c954c74be91e6b7")
}
> db.demo628.insertOne({id:2,Name:["Mike","Sam","John"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e9ae8056c954c74be91e6b8")
}コレクション内のすべてのドキュメントを表示する
find()メソッドを使用すると、コレクション内のすべてのドキュメントを確認できます。
> db.demo628.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e9ae7ea6c954c74be91e6b6"), "id" : 1, "Name" : [ "Chris", "David", "John" ] }
{ "_id" : ObjectId("5e9ae7f26c954c74be91e6b7"), "id" : 1, "Name" : [ "Carol", "Sam" ] }
{ "_id" : ObjectId("5e9ae8056c954c74be91e6b8"), "id" : 2, "Name" : [ "Mike", "Sam", "John" ] }リスト内の値(オブジェクト以外)をクエリする
次に、位置演算子($)を使って、配列内の値(オブジェクトではない単純な値)を検索します。プロジェクションで「Name.$」を指定することで、クエリ条件に一致した要素のみが結果として返されます。
> db.demo628.find({"Name":"John"}, {"id":1, "Name.$":1});このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e9ae7ea6c954c74be91e6b6"), "id" : 1, "Name" : [ "John" ] }
{ "_id" : ObjectId("5e9ae8056c954c74be91e6b8"), "id" : 2, "Name" : [ "John" ] }このように、位置演算子($)を活用すれば、配列内から条件に一致する値だけを効率的に取り出すことができます。上記の例では、「John」という値を含むドキュメントのみが抽出され、Nameフィールドには一致した要素「John」だけが表示されていることが確認できます。
-
MongoDBで大文字と小文字を区別せずに特定の名前のドキュメントを取得するクエリ
MongoDBで、フィールド値の大文字と小文字の違いに関係なくドキュメントを検索したい場合には、$regex演算子を使用します。この記事では、「David」という名前を持つドキュメントを、大文字・小文字を問わず検索する方法を解説します。サンプルコレクションの作成まず、デモ用のコレクションにドキュメントを挿入します。意図的に「david」「DAVID」「David」など、大文字と小文字が異なる名前を登録している点に注目してください。> db.demo700.insertOne( { details: [ { Name:david }]}); { acknowledged : true
-
MongoDBでオブジェクト配列内の特定のネストされたドキュメントをクエリする方法
MongoDBでオブジェクトの配列からネストされたドキュメントを抽出する オブジェクトの配列に格納されたネストされたドキュメントを条件付きで検索したい場合、find()メソッドに$elemMatch演算子を組み合わせることで、指定した条件に一致する要素だけを取り出すことができます。 ここでは、「StudentAge」フィールドを持つ学生情報だけを配列から抽出する例を見ていきましょう。 1. サンプルコレクションの作成 まず、ドキュメントを挿入してコレクションを作成します。このコレクションには、学生情報がオブジェクトの配列として格納されています。 > db.demo763.insertO