SQL INおよびNOT INをMongoDBの$inと$ninに変換する

SQL INおよびNOT IN演算子がリスト内の値とのマッチングのためにMongoDBの$inおよび$ninクエリ演算子に変換される方法を学びます。

Filtering

詳細な説明

IN / NOT INから$in / $ninへ

SQLのIN演算子は、カラム値がリスト内のいずれかの値に一致するかどうかをチェックします。MongoDBは同じ目的で$in演算子を提供し、否定形として$ninを提供します。

SQLの例

SELECT * FROM users
WHERE role IN ('admin', 'editor', 'moderator')

生成されるMongoDBクエリ

db.users.find({
  role: { $in: ["admin", "editor", "moderator"] }
})

NOT INの例

SELECT * FROM products
WHERE category NOT IN ('archived', 'draft')
db.products.find({
  category: { $nin: ["archived", "draft"] }
})

$inと混合型

SQLではIN値は通常同じ型を共有しますが、MongoDBの$inは混合型を含むことができます:

db.items.find({ tag: { $in: ["featured", 1, true] } })

この柔軟性はMongoDBの動的スキーマから来ていますが、予測可能な結果を得るために型を一貫させることが最善です。

配列フィールドでの$in

MongoDB固有の強力な動作として、$inは配列フィールドにも機能します。ドキュメントが配列を含むフィールドを持つ場合、配列のいずれかの要素が提供されたリストにあればマッチします。これはSQLに直接の同等物がなく、ドキュメント指向データに対するMongoDBの強みの一つです。

パフォーマンス

$in$ninの両方がインデックスを使用できます。ただし、$ninは値がマッチしないことを確認する必要があるため、通常フルコレクションスキャンが必要で、$inよりも効率が低くなります。

ユースケース

コンテンツ管理システムでは、ステータス(公開、下書き、レビュー中)やカテゴリタグで記事をフィルタリングすることが頻繁にあります。SQL INクエリの変換は、動的コンテンツフィルターの構築に不可欠な複数値マッチングをMongoDBがどのように処理するかを示します。

試してみる — SQL to MongoDB Query

フルツールを開く