本文整理了 MongoDB Shell 中最常用的 21 種查詢場景,每項均附上 MongoDB 語法與對應的 SQL 寫法,方便關係型資料庫開發者快速上手。
集合名稱:userInfo,欄位包含 name、age、sex 等。
db.userInfo.find()
相當於:SELECT * FROM userInfo;it 迭代下一頁(不加分號)。可用 DBQuery.shellBatchSize=50 調整每頁筆數。
db.userInfo.distinct("name")
相當於:SELECT DISTINCT name FROM userInfo;
age = 22
db.userInfo.find({age: 22})
age > 22
db.userInfo.find({age: {$gt: 22}})
age < 22
db.userInfo.find({age: {$lt: 22}})
age >= 25
db.userInfo.find({age: {$gte: 25}})
age <= 25
db.userInfo.find({age: {$lte: 25}})
23 <= age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}})
db.userInfo.find({name: /mongo/})
相當於:SELECT * FROM userInfo WHERE name LIKE '%mongo%';
db.userInfo.find({name: /^mongo/})
相當於:SELECT * FROM userInfo WHERE name LIKE 'mongo%';
name, age
db.userInfo.find({}, {name: 1, age: 1})
相當於:SELECT name, age FROM userInfo;1/true 表示包含,0/false 表示排除。
age > 25 且只取 name, age
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1})
// 升序
db.userInfo.find().sort({age: 1})
// 降序
db.userInfo.find().sort({age: -1})
name='zhangsan' AND age=22
db.userInfo.find({name: 'zhangsan', age: 22})
LIMIT 5
db.userInfo.find().limit(5)
SKIP 10
db.userInfo.find().skip(10)
db.userInfo.find().limit(10).skip(5)
age=22 OR age=25
db.userInfo.find({$or: [{age: 22}, {age: 25}]})
db.userInfo.findOne()
等同於 db.userInfo.find().limit(1)。
db.userInfo.find({age: {$gte: 25}}).count()
db.userInfo.find({sex: {$exists: true}}).count()
相當於:SELECT COUNT(sex) FROM userInfo;
MongoDB 的查詢語法靈活且富有表達力,掌握上述 21 種模式基本可覆蓋日常 90% 的查詢需求。建議在實際專案中結合索引策略,進一步提升查詢效能。