1. 程式人生 > >MongoDB 基本操作和聚合操作

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