SQL AND/OR条件をMongoDBの$and/$or演算子に変換する
SQL WHERE句のANDおよびOR論理演算子が複雑なフィルタリングのためにMongoDBの$andおよび$orクエリ演算子に変換される方法を学びます。
Advanced
詳細な説明
論理演算子:ANDとOR
SQLはANDとORで条件を組み合わせます。MongoDBは条件の配列を受け取る$andと$or演算子を提供します。
SQLの例
SELECT * FROM products
WHERE (category = 'electronics' OR category = 'books')
AND price < 50
生成されるMongoDBクエリ
db.products.find({
$and: [
{ $or: [
{ category: "electronics" },
{ category: "books" }
] },
{ price: { $lt: 50 } }
]
})
暗黙のAND
すべての条件がANDで結合され、異なるフィールドに適用される場合、MongoDBは同じドキュメント内に配置することで暗黙のANDを使用します:
SELECT * FROM users WHERE age >= 18 AND status = 'active'
db.users.find({
age: { $gte: 18 },
status: "active"
})
これは明示的な$andを使用するよりもクリーンです。コンバーターは可能な場合、暗黙の形式を使用します。
明示的な$and
明示的な$andは、複数の条件が同じフィールドに適用される場合に必要です:
db.products.find({
$and: [
{ price: { $gte: 10 } },
{ price: { $lte: 100 } }
]
})
またはより簡潔に、同じフィールドの演算子を組み合わせます:
db.products.find({
price: { $gte: 10, $lte: 100 }
})
$and内の$orのネスト
混合演算子を持つ複雑なSQL条件は、ネストされたMongoDB式に変換されます。コンバーターは演算子の優先順位を尊重します:SQLと同様にANDはORよりも強く結合します。
パフォーマンスのヒント
$or配列では最も選択性の高い条件を最初に配置してください。MongoDBは$or条件を順番に評価し、ショートサーキットが可能です。$or条件内のフィールドのインデックスも、各ブランチがインデックスを活用できる場合により効果的に使用されます。
ユースケース
カテゴリ、価格帯、在庫状況でフィルタリングされるEC商品リストなど、複数のフィルター条件を持つ検索ページでは、ANDとOR条件を頻繁に組み合わせます。これらがMongoDBにどのようにマッピングされるかを理解することは、パフォーマンスの高いクエリレイヤーの構築に不可欠です。