微服務流行,我也是愈來愈喜歡MongoDB了,除非必要要用MySQL,我都會傾向於MongoDB。sql
MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。數據庫
在高負載的狀況下,添加更多的節點,能夠保證服務器性能。編程
MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。數組
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。bash
因爲MongoDB獨特的數據處理方式,能夠將熱點數據加載到內存,故而對查詢來說,會很是快(固然也會很是消耗內存);同時因爲採用了BSON的方式存儲數據,故而對JSON格式數據具備很是好的支持性以及友好的表結構修改性,文檔式的存儲方式,數據友好可見;數據庫的分片集羣負載具備很是好的擴展性以及很是不錯的自動故障轉移(大讚)。服務器
不足:數據庫的查詢採用了特有的查詢方式,有必定的學習成本(不高);索引不咋滴;鎖只能提供到collection級別,還作不到行級鎖;沒有事務機制(不能回滾啊);學習資料確定沒有MySQL的多。網絡
MongoDB側重於對數據進行操做的應用系統,而Hadoop則側重於對數據進行分析統計的應用。數據結構
MongoDB可以知足對數據庫讀寫性能具備極高要求的應用場景(很消耗memory的),通常這些應用的響應延遲會要求控制在10ms如下,甚至更低。而Hadoop因爲每一次的讀寫操做會包含大量數據(Hadoop更適合少次操做大批量數據的場景),經過彙集分析處理大量數據,這種分析通常都會走MapReduce,會形成很高的延遲(數分鐘到數小時不等)框架
db.collection.find(query, projection).pretty()
複製代碼
collection:文檔名稱,或者可寫成 getCollection('col_name')
編程語言
query :可選,使用查詢操做符指定查詢條件
projection:可選,使用投影操做符指定返回的鍵。查詢時返回文檔中全部鍵值, 只需省略該參數便可(默認省略)。
pretty():易讀
操做 | 格式 | 範例 |
---|---|---|
等於 | {<key>:<value> } |
db.col.find({"by":"菜鳥教程"}).pretty() |
小於 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
小於或等於 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
大於 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
大於或等於 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
不等於 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
db.col.find({key1:value1, key2:value2}).pretty()
複製代碼
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
複製代碼
db.col.find(
{
key1: value1,
$or: [
{key2: value2},
{key3: value3}
]
}
).pretty()
複製代碼
該參數指定從MongoDB中讀取的記錄條數。
db.col.find().limit(NUMBER)
複製代碼
跳過指定數量的數據
db.col.find().limit(NUMBER).skip(NUMBER)
複製代碼
db.col.find().sort({KEY:1})
複製代碼
db.col.aggregate(AGGREGATE_OPERATION)
複製代碼
舉例:如今咱們經過以上集合計算每一個做者所寫的文章數,使用aggregate()計算結果以下:
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
複製代碼
與sql相同:
select by_user, count(*) from mycol group by by_user
複製代碼
管道在Unix和Linux中通常用於將當前命令的輸出結果做爲下一個命令的參數。
MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢後將結果傳遞給下一個管道處理。管道操做是能夠重複的。
表達式:處理輸入文檔並輸出。表達式是無狀態的,只能用於計算當前聚合管道的文檔,不能處理其它的文檔。
這裏咱們介紹一下聚合框架中經常使用的幾個操做: