MongoDB 基本操作和聚合操作
阿新 • • 發佈:2018-12-17
一 . MongoDB 基本操作
基本操作可以簡單分為查詢、插入、更新、刪除。
1 文件查詢
作用 | MySQL SQL | MongoDB |
所有記錄 | SELECT * FROM users; | db.users.find(); |
age =18 | SELECT * FROM users WHERE age = 18; | db.users.find({“age”:18}); |
篩選欄位 | SELECT age FROM users WHERE age = 18; | db.users.find({“age”:18},{age:1}); |
排序 | SELECT * FROM users ORDER BY name ASC |
db.users.find().sort({name:1}); |
比較 | SELECT * FROM users WHERE age > 18; | db.users.find({“age”:{$gt:18}}); |
正則 | SELECT * FROM users WHERE name LIKE zha; | db.users.find({“name”:/^zha/}); |
忽略 | SELECT * FROM users LIMIT 10 SKIP 20; | db.users.find().limit(10).skip(20); |
or | SELECT * FROM users WHERE a=1 or b=2; |
db.users.find({$or : [{ a : 1} , {b : 2}]}); |
distinct | SELECT DISTINCT name FROM users; | db.users.distinct(‘name'); |
count | SELECT COUNT(name) FROM users; | db.users.find({name: {'$exists': true}}).count(); |
2.文件插入
作用 | 操作指令(案例) |
單文件插入 | db.inventory.insertOne( { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } } ) |
多文件批量插入 |
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } }, { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } }, { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } } ]) |
文件大量插入時,通過多文件批量插入的形式可以大大提高效能,但是MongoDB 4.0 之前的版本是單文件事務型,所以,在多文件批量插入時,不能保證所有文件操作的原子性,即插入過程中,如果不幸出現了系統問題,有可能部分文件插入成功,而部分文件插入失敗。
3.文件更新
文件更新主要有兩種形式,一種是替換修改,一種是通過操作符修改。後者是常見的修改方式,在此主要講解後者。
操作符 | 操作符描述 |
$inc | 根據給定的值增加欄位 |
$set | 設定欄位給定的值 |
$unset | 取消設定欄位 |
$rename | 重新命名欄位為給定的值 |
$setOnInsert |
在upsert中,只在插入時設定欄位; 如果要更新的文件存在那麼$setOnInsert操作符不做任何處理 |
$bit | 只執行按位更新欄位 |
關於資料的更新操作符
陣列操作符 | 陣列操作符描述 |
$push | 新增值到陣列中 |
$addToSet | 新增值到陣列中,重複了也不處理 |
$pop | 從陣列中刪除第一個或最後一個值 |
$pull | 從陣列中刪除匹配查詢條件的值 |
$eash | 與$push和$addToSet一起使用來操作多個值 |
$slice | 與$push和$each一起使用來縮小更新後陣列的大小 |
4.文件刪除
集合資料的刪除主要通過remove的命令來刪除,類似於關係型資料庫中的delete。
二 聚合操作
MySQL | MongoDB | 功能描述 |
select | $project | 指定輸出文件裡的欄位 |
where | $match | 選擇要處理的文件,與find()類似 |
group by | $group | 根據key來分組文件 |
having | $match | 刷選文件 |
limit | $limit | 限制傳遞給下一步的文件數量 |
order by | $sort | 排序文件 |
count/sum | $sum | 統計 |
join | $unwind | 擴充套件陣列,為每個陣列入口生成一個輸出文件 |
join | $look up | 表關聯 |
skip | $skip | 跳過一定資料量的文件 |