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

【MongoDB】配列に対してANDクエリを実行する方法 – $all演算子の使い方

MongoDBの配列に対してANDクエリを実行するには

MongoDBで配列フィールドに対してAND検索(指定した複数の値がすべて含まれるドキュメントを取得)を行いたい場合は、$all演算子を使用します。通常の$and演算子ではなく、配列内の全要素の一致を確認したい場合に$allが適しています。

まず、サンプルとなるコレクションとドキュメントを作成しましょう。

> db.andQueryDemo.insertOne({"StudentName":"Carol Taylor","FavouriteSubject":["C","Java","MongoDB","MySQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc73e7a8f9e6ff3eb0ce433")
}
> db.andQueryDemo.insertOne({"StudentName":"David Miller","FavouriteSubject":["C++","Java","MongoDB","SQL Server"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc73ea48f9e6ff3eb0ce434")
}
> db.andQueryDemo.insertOne({"StudentName":"Carol Taylor","FavouriteSubject":["Python","PL/SQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc73ed38f9e6ff3eb0ce435")
}

登録されたドキュメントの確認

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

> db.andQueryDemo.find().pretty();

上記のクエリを実行すると、次のような出力が得られます。

{
   "_id" : ObjectId("5cc73e7a8f9e6ff3eb0ce433"),
   "StudentName" : "Carol Taylor",
   "FavouriteSubject" : [
      "C",
      "Java",
      "MongoDB",
      "MySQL"
   ]
}
{
   "_id" : ObjectId("5cc73ea48f9e6ff3eb0ce434"),
   "StudentName" : "David Miller",
   "FavouriteSubject" : [
      "C++",
      "Java",
      "MongoDB",
      "SQL Server"
   ]
}
{
   "_id" : ObjectId("5cc73ed38f9e6ff3eb0ce435"),
   "StudentName" : "Carol Taylor",
   "FavouriteSubject" : [
      "Python",
      "PL/SQL"
   ]
}

$all演算子を使ったANDクエリの実行方法

それでは、$all演算子を使って、配列に対するANDクエリを実行してみます。ここでは、FavouriteSubjectに「Java」と「MongoDB」の両方が含まれるドキュメントのみを表示します。

> db.andQueryDemo.find({FavouriteSubject:{$all:["Java","MongoDB"]}}).pretty();

実行結果は以下の通りです。「Java」と「MongoDB」の両方を好きな科目として持つ2件のドキュメントだけが取得されました。

{
   "_id" : ObjectId("5cc73e7a8f9e6ff3eb0ce433"),
   "StudentName" : "Carol Taylor",
   "FavouriteSubject" : [
      "C",
      "Java",
      "MongoDB",
      "MySQL"
   ]
}
{
   "_id" : ObjectId("5cc73ea48f9e6ff3eb0ce434"),
   "StudentName" : "David Miller",
   "FavouriteSubject" : [
      "C++",
      "Java",
      "MongoDB",
      "SQL Server"
   ]
}

まとめ

MongoDBの配列フィールドに対して「指定した値がすべて含まれる」というAND条件で検索する場合は、$all演算子を使います。3人目の学生「Carol Taylor」(Python、PL/SQL)は両方の科目を含んでいないため、結果から除外されている点に注目してください。このように$allを活用すれば、配列内の複数要素の同時一致をシンプルかつ効率的に確認できます。

  1. MongoDBでサブドキュメントの配列をクエリする方法

    MongoDBでサブドキュメントの配列をクエリするには、集計パイプラインの$unwindを使用します。$unwindは、配列フィールドを展開し、配列の各要素ごとに個別のドキュメントを生成するステージです。これにより、配列内のサブドキュメントを個別にフィルタリングできるようになります。ここでは、大学の情報を含むコレクションを作成し、その中から特定の条件に一致するサブドキュメントを抽出する手順を解説します。コレクションの作成まず、insertOne()メソッドを使って、サブドキュメントの配列を含むドキュメントを挿入しましょう。> db.demo499.insertOne({... "

  2. MongoDBで埋め込みドキュメントの配列をクエリし、新しいドキュメントをプッシュする方法

    MongoDBで埋め込みドキュメントの配列に対してクエリを実行し、条件を満たす場合にのみ新しいドキュメントを追加したい場合は、updateメソッドと$push演算子を組み合わせて使用します。ここでは、実際のサンプルコードを使って手順を詳しく解説します。 手順1:サンプルコレクションの作成 まず、insertOne()メソッドを使って、埋め込みドキュメントの配列を含むドキュメントを作成しましょう。 > db.demo573.insertOne( ... { ... _id :101, ... SearchInformation : [ ...