Help 與基本導航
help # 指令說明
show dbs # 列出資料庫
use <dbname> # 切換/建立資料庫 (建立集合時才實際創建)
db.dropDatabase() # 刪除當前資料庫
db.cloneDatabase("host") # 從指定主機克隆
db.copyDatabase("from","to","host") # 複製資料庫
db.repairDatabase() # 修復
db.getName() / db # 顯示當前資料庫
db.stats() # 狀態統計
db.version() # 版本
db.getMongo() # 連線位址
集合操作
db.createCollection("coll", {size:20, capped:5, max:100}) # 建立 (可設上限)
db.getCollection("account") # 取得集合物件
db.getCollectionNames() # 所有集合名稱
db.printCollectionStats() # 索引/儲存統計
db.coll.renameCollection("newName") # 重命名
db.coll.drop() # 刪除集合
用戶管理
db.addUser("name") # 新增用戶
db.addUser("user","pwd", true) # 新增唯讀用戶
db.auth("user","pwd") # 認證
show users # 列出用戶
db.removeUser("user") # 刪除用戶
CRUD 與查詢語法
| 操作 | 範例 | SQL 對應 |
| 查詢全部 | db.coll.find() | SELECT * FROM coll |
| 條件查詢 | db.coll.find({"age":22}) | WHERE age=22 |
| 比較運算 | {age:{$gt:22}}, {age:{$lt:22}}, {age:{$gte:25}}, {age:{$lte:25}} | >, <, >=, <= |
| 範圍 | {age:{$gte:23,$lte:26}} | BETWEEN |
| 模糊比對 | {name:/mongo/}, {name:/^mongo/} | LIKE '%mongo%', LIKE 'mongo%' |
| 投影欄位 | find({}, {name:1, age:1}) | SELECT name, age |
| 排序 | find().sort({age:1}) / sort({age:-1}) | ORDER BY age ASC/DESC |
| AND 條件 | find({name:'zhangsan', age:22}) | WHERE name=... AND age=... |
| OR 條件 | find({$or:[{age:22},{age:25}]}) | WHERE age=22 OR age=25 |
| 限制筆數 | find().limit(5) | TOP 5 / LIMIT 5 |
| 跳過筆數 | find().skip(10) | OFFSET 10 |
| 分頁 | find().limit(10).skip(5) | LIMIT 10 OFFSET 5 |
| 單筆 | findOne() | TOP 1 |
| 統計 | find({age:{$gte:25}}).count() | COUNT(*) WHERE... |
| 去重 | distinct("name") | SELECT DISTINCT name |
索引操作
db.coll.ensureIndex({name:1}) # 單欄
db.coll.ensureIndex({name:1, ts:-1}) # 複合
db.coll.getIndexes() # 列出索引
db.coll.totalIndexSize() # 索引總大小
db.coll.reIndex() # 重建索引
db.coll.dropIndex("name_1") # 刪除指定
db.coll.dropIndexes() # 刪除全部
資料異動
# 新增
db.coll.save({name:'zhangsan', age:25, sex:true})
# 修改
db.coll.update({age:25}, {$set:{name:'changeName'}}, false, true) # multi=true
db.coll.update({name:'Lisi'}, {$inc:{age:50}}, false, true)
db.coll.update({name:'Lisi'}, {$inc:{age:50}, $set:{name:'hoho'}}, false, true)
# 刪除
db.coll.remove({age:132})
# 查詢修改/刪除 (原子)
db.coll.findAndModify({
query: {age:{$gte:25}},
sort: {age:-1},
update: {$set:{name:'a2'}, $inc:{age:2}},
remove: true
})
腳本與游標
# 迴圈新增
for (var i=0; i<30; i++) db.coll.save({name:"u_"+i, age:22+i, sex:i%2})
# 游標逐筆
var c = db.coll.find()
while (c.hasNext()) printjson(c.next())
# forEach
db.coll.find().forEach(printjson)
# 游標當陣列
var c = db.coll.find()
printjson(c[4])
for (var i=0, len=c.length(); i
參考連結
- MongoDB 安裝配置
- Mongodb 常用指令
- mongodb 陣列查詢