SQL BETWEENをMongoDBの$gteと$lteの範囲クエリに変換する

SQL BETWEENが数値、日付、文字列フィールドの範囲クエリのためにMongoDBの$gteと$lteを組み合わせたフィルターに変換される方法を学びます。

Filtering

詳細な説明

BETWEENから$gte + $lteへ

SQLのBETWEEN演算子は、両端を含む範囲チェックのシンタックスシュガーです。MongoDBでは、同じフィールドに対する$gte(以上)と$lte(以下)フィルターの組み合わせに変換されます。

SQLの例

SELECT * FROM orders
WHERE total BETWEEN 100 AND 500

生成されるMongoDBクエリ

db.orders.find({
  total: { $gte: 100, $lte: 500 }
})

範囲クエリの仕組み

MongoDBでは、単一の条件オブジェクト内で同じフィールドに複数の演算子を使用できます。{ total: { $gte: 100, $lte: 500 } }というクエリは「totalが100以上かつ500以下」を意味し、BETWEENが表現するものと正確に一致します。

日付範囲

BETWEENはSQLで日付とともによく使用されます:

SELECT * FROM events
WHERE event_date BETWEEN '2024-01-01' AND '2024-12-31'

MongoDBでは、日付はISODateオブジェクトとして保存されます:

db.events.find({
  event_date: {
    $gte: ISODate("2024-01-01"),
    $lte: ISODate("2024-12-31")
  }
})

NOT BETWEEN

SQLのNOT BETWEENは、$lt$gt$orと組み合わせて範囲を反転させることで表現できます:

db.orders.find({
  $or: [
    { total: { $lt: 100 } },
    { total: { $gt: 500 } }
  ]
})

インデックスの活用

MongoDBの範囲クエリはインデックスから大きな恩恵を受けます。クエリ対象フィールドの単一フィールドインデックスにより、MongoDBはすべてのドキュメントをチェックする代わりに効率的な範囲スキャンを実行できます。複合範囲クエリの場合、複合インデックスでは範囲フィールドの前に等値条件を配置してください。

ユースケース

日付または金額の範囲内でトランザクションをクエリする財務レポーティングシステムでよく使用されます。BETWEENからMongoDBの範囲演算子への変換は、期間、価格帯、または数量しきい値でフィルタリングするダッシュボードの構築に不可欠です。

試してみる — SQL to MongoDB Query

フルツールを開く