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> } ] }

クエリ エンジンでクエリが最適化されるよう、$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

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

戻る

論理クエリ