$and
$and
$and
では論理的なAND
演算を 1 つ以上の式(<expression1>
や<expression2>
など)の配列で実行し、すべての式を満たすドキュメントを選択します。注意
MongoDB では、カンマで区切られた式のリストを指定するときには暗黙的な
AND
操作になります。
互換性
次の環境でホストされる配置には $and
を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$and
の構文は次のとおりです。
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
動作
クエリ エンジンでクエリが最適化されるよう、$and
はエラーを次のように処理します。
$and
に指定した式が単独で評価されるとエラーが発生する場合、その式を含む$and
でエラーが発生することがありますが、必ずしもエラーが発生するわけではありません。$and
に最初に指定した式の後に式を指定すると、最初の式がfalse
と評価されていてもエラーが発生することがあります。
たとえば、次のクエリでは、 $x
が 0
の場合、常にエラーが発生します。
db.example.find( { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } )
$and
に複数の式を指定した次のクエリでは、$x
が 0
であるドキュメントがある場合にエラーが発生することがあります。
db.example.find( { $and: [ { x: { $ne: 0 } }, { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ] } )
例
AND
同じフィールドを指定する複数の式を含むクエリ
次のクエリを考えてみましょう。
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 } } )
AND
同じ演算子を指定する複数の式を含むクエリ
次のクエリを考えてみましょう。
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
操作は使用できません。