天天看點

MongoDB 基本操作和聚合操作

一 . 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  刷選文檔
limit  $limit  限制傳遞給下一步的文檔數量
order by  $sort  排序文檔 
count/sum  $sum  統計 
join  $unwind  擴充數組,為每個數組入口生成一個輸出文檔 
$look up  表關聯 
skip  $skip  跳過一定資料量的文檔