MongoDB 查詢表達式全攻略
MongoDB 提供豐富的查詢運算子,支援比較、邏輯、元素、正則、JavaScript 等多種條件構建。本文系統整理常用查詢表達式,附帶實戰示例,便於快速查閱。
1. 比較運算子
| 運算子 | 含義 | 示例 |
$ne | 不等於 | db.stu.find({name:{$ne:'billvsme'}}) |
$gt | 大於 | db.stu.find({age:{$gt:18}}) |
$lt | 小於 | db.stu.find({age:{$lt:18}}) |
$gte | 大於等於 | db.stu.find({age:{$gte:18}}) |
$lte | 小於等於 | db.stu.find({age:{$lte:18}}) |
2. 集合運算子
| 運算子 | 含義 | 示例 |
$in | 在指定數組中 | db.goods.find({stu_id:{$in:[93001,93002]}}) |
$nin | 不在指定數組中 | db.stu.find({age:{$nin:[18,20]}}) |
$all | 包含數組所有元素 | db.stu.find({like:{$all:['football','basketball']}}) |
3. 邏輯運算子
| 運算子 | 含義 | 示例 |
$or | 或 | db.stu.find({$or:[{age:18},{name:'tom'}]}) |
$and | 且(顯式) | db.stu.find({$and:[{age:{$gt:18}},{age:{$lt:22}}]}) |
$not | 非 | db.stu.find({age:{$not:{$gt:18}}}) |
$nor | 所有條件均為假 | db.stu.find({$nor:[{age:18},{age:20}]}) |
4. 元素運算子
| 運算子 | 含義 | 示例 |
$exists | 字段是否存在 | db.stu.find({body:{$exists:true}}) |
$mod | 取模運算 | db.stu.find({stu_id:{$mod:[5,0]}}) // 5 的倍數 |
$type | 字段類型匹配 | db.stu.find({age:{$type:2}}) // 2 為 String |
類型代碼參考:MongoDB 官方文檔
5. 進階運算子(慎用,影響性能)
| 運算子 | 含義 | 示例 |
$where | JavaScript 表達式 | db.stu.find({$where:'this.age>18'}) |
$regex | 正則匹配 | db.stu.find({name:{$regex:'^bill'}}) |
性能提示:$where 需將 BSON 轉 JSON 再執行,效率極低;$regex 若無索引支持會全表掃描。生產環境請優先使用原生運算子並建立索引。
6. 實戰組合示例
// 年齡 18-25 之間,且喜歡籃球或足球,姓名以 "A" 開頭
db.stu.find({
$and: [
{age: {$gte: 18, $lte: 25}},
{like: {$in: ['basketball', 'football']}},
{name: {$regex: '^A'}}
]
})