一 . MongoDB 基本操作 基本操作可以簡單分為查詢、插入、更新、刪除。 1 文檔查詢 2.文檔插入 db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: ...
一 . 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 | 跳過一定數據量的文檔 |