Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / /

$and

項目一覧

  • 互換性
  • 構文
  • 動作
$and

$and では論理的な AND 演算を 1 つ以上の式(<expression1><expression2> など)の配列で実行し、すべての式を満たすドキュメントを選択します。

注意

MongoDB では、カンマで区切られた式のリストを指定するときには暗黙的な AND 操作になります。

次の環境でホストされる配置には $and を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

$andの構文は次のとおりです。

{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }

MongoDB のクエリ オプティマイザでは、$and 式の句を評価する際に、実行に最適なプランを選択するために、$and 式の句を満たすのにどのインデックスを役立てることができるのかが検討されます。

クエリ エンジンでクエリが最適化されるよう、$and はエラーを次のように処理します。

  • $and に指定した式が単独で評価されるとエラーが発生する場合、その式を含む $and でエラーが発生することがありますが、必ずしもエラーが発生するわけではありません。

  • $and に最初に指定した式の後に式を指定すると、最初の式が false と評価されていてもエラーが発生することがあります。

たとえば、次のクエリでは、 $x0 の場合、常にエラーが発生します。

db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )

$and に複数の式を指定した次のクエリでは、$x0 であるドキュメントがある場合にエラーが発生することがあります

db.example.find( {
$and: [
{ x: { $ne: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )

次のクエリを考えてみましょう。

db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )

クエリは、次の条件を満たす inventory コレクション内のすべてのドキュメントを選択します。

  • price フィールドの値が1.99 と等しくない、かつ

  • price フィールドが存在する。

クエリは、price フィールドの演算子式を組み合わせた暗黙的な AND 操作で書き直すことができます。

db.inventory.find( { price: { $ne: 1.99, $exists: true } } )

次のクエリを考えてみましょう。

db.inventory.find( {
$and: [
{ $or: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } } ] },
{ $or: [ { sale: true }, { price : { $lt : 5 } } ] }
]
} )

このクエリは、次のすべての文書を選択します。

  • qtyフィールドの値が10より小さい、もしくは50より大きい、かつ

  • sale フィールドの値が true に等しい、もしくは price フィールドの値が 5 未満。

このクエリでは $or 演算子を複数回使用するため、暗黙的な AND 操作は使用できません。

Tip

以下も参照してください。

戻る

論理クエリ