第3章: MongoDB - 条件付きクエリ
この章では、MongoDBの条件付きクエリを紹介します。これは、SQLの等しい、より大きい、より小さいなどの比較演算子と類似しています。
MongoDBでサポートされている条件付き演算子
演算子 | 説明 |
---|---|
$eq | 等しい、SQLの = 演算子に類似 |
$gt | より大きい、SQLの > 演算子に類似 |
$gte | 以上、SQLの >= 演算子に類似 |
$in | 配列に一致、SQLのinクエリに類似 |
$lt | より小さい、SQLの < 演算子に類似 |
$nin | 配列内のいかなる値にも一致しない、SQLのnot in演算子に類似 |
テストデータ
インベントリコレクションのデータは以下の通りです。
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
$eq (一致)
db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )
// 短縮形、$eq演算子を無視することができ、qty = 20
db.inventory.find( { qty: 20 } )
同等なSQL:
select * from inventory where qty = 20
// これはただの例であり、SQLはitem.nameのような入れ子のフィールド形式をサポートしていません
select * from inventory where item.name = 20
$gt (より大きい)
db.inventory.find( { qty: { $gt: 20 } } )
同等なSQL:
select * from inventory where qty > 20
$gte (以上)
db.inventory.find( { qty: { $gte: 20 } } )
同等なSQL:
select * from inventory where qty >= 20
$in (含む)
配列内の一つの値に一致
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
同等なSQL:
select * from inventory where qty in (5, 15)
$nin (含まない)
$in演算子の逆
db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
同等なSQL:
select * from inventory where qty not in (5, 15)
$lt (より小さい)
db.inventory.find( { qty: { $lt: 20 } } )
同等なSQL:
select * from inventory where qty < 20