Mongodb大數據語法大全

JSON和MONGODB
JSON不止是一種交換數據的方式,也是一種存儲數據的良好方式,實際上MONGODB並未使用JSON存儲數據,而是使用由MONGODB團隊開發的一種稱爲BSON的開放數據格式。正則表達式


面向文檔存儲BSON
BSON是一個開放標準,BSON存儲使用的空間比JSNO(CouchDB一個強大的面向文檔數據庫)多在相同版本狀況下。數據庫


BSON的優點在於
一、處理數據比JSON快,消耗必定的存儲空間,簡單說BSON更方便瀏覽,遍歷索引頁很是快。
二、使用BSON容易將它數據快速轉換爲編程餘元的原生數據格式
三、BSON也提供對JSON的一些擴展,經過BSON能夠存儲二進制數據,以及處理特定的數據類型,所以,BSON能夠存儲任何JSON文檔,但有效的BSON文檔可能不是有效的JSON編程

瀏覽數據庫
use testDB //切換已有數據庫或者建立新的數據庫
查看可用的數據庫和集合數組


show dbs //只會顯示出已經存在的數據庫app


show collections //顯示當前數據庫中的全部集合函數


集合中插入數據
最經常使用的操做就是在集合中插入數據,全部數據都以BSON格式存儲,插入數據能夠先定義數據,而後使用insertOne函數將它們保存在集合中,或使用insert函數臨時輸入文檔內容。spa


douctment=({"key1":"values"})
db.test.insertOne(douctment)
插入數據時,鍵名必須遵照以下規則:
$字符不能是鍵名的第一個字符
圓點[.]不能出如今鍵中
名稱_id被保留使用
集合的名稱不能超過128個字符
空字符串("")不能用做集合名稱
集合名必須以字母或下劃線開頭
集合名SYSTEM被MONGDB保留,不能使用
集合名不能包含null字符"\0"對象

所有數據查詢
db.testDB.find() //結果顯示其中的全部文檔排序


獲取特定類型的文檔
db.testDB.find({"key1":"values"})
獲取values相關的數據標題,忽略其餘索引


db.testDB.find({"key1":"values"},{"Tilte":1})
使用函數sort、limit和skip


db.testDB.find().sort({"Tilte":1}) //按鍵的結果進行升序,若-1爲降序
db.testDB.find().limit(10) //取文檔前N個結果數目
db.testDB.find().skip(20) //跳過文檔的前N個數據


組合使用這些函數
db.testDB.find().sort({"Tilte":1}).limit(10).skip(10)

在MONGODB中使用查詢時,還須要注意一些額外的概念和特性,包括固定集合、天然順序和$natural

天然順序:是數據庫中結合的原生排序方法,因此若是在查詢集合中的文檔時,若是沒有顯示指定排序順序,結果將默認按照前向天然順序返回。


固定集合:是數據庫的一種集合,它的天然順序保證與文檔插入的順序一致,保證天然順序一直與文檔插入順序一致,另外一優勢是集合的大小固定,最老的數據將被刪除,最新的數據將被添加到末端,保證天然順序與文檔插入的順序一致


固定集合必須使用createCollection函數,如建立名爲auth的固定集合
db.createCollection("auth":{capped:true,size:20480})
可使用max限制固定集合中的文檔數量
db.createCollection("auth":{capped:true,size:20480,max:100})
$natural:鑑於固定集合保證了天然順序與插入順序一致,查詢時不須要再使用任何特殊的參數、任何其餘特殊的命令或函數,如查找最近的10條數據
db.testDB.find().sort({$natural:-1}).limit(10)

查看集合的大小
db.testDB.stats()
獲取單個文檔
db.testDB.findOne()
使用匯集命名
count()函數返回文檔的數目
db.testDB.count() //指定集合中的文檔數目
執行額外的過濾統計
db.testDB.find({"key1":"values"},{"Tilte":1}).count() //count()函數默認將忽略skip()或limit()參數,若不想被忽略須要使用count(true)
db.testDB.find({"key1":"values"},{"Tilte":1}).limit(10).count(true)
使用distinct函數獲取惟一值
db.testDB.distinct({"Tilte"})
將結果分組group()
該命令目的是返回一個已分組元素的數組,函數group()接受3個參數:key,initial和reduce,但在分片環境中沒法正常工做
參數key指定但願使用哪一個鍵對結果進行分組。
參數initial容許爲每一個已分組的結果提供基數(元素開始開始統計的起始基數),若是但願返回指定的數字,參數默認爲0
參數reduce把全部相似的條目分組在一塊兒,它接受2個參數:items和pre
db.testDB.group(
key:{"Tilte":true},
initial:{Total:0},
reduct:function(items,pre){
prev.Total+=1
}
)


使用條件操做符
$gt大於參數
db.testDB.find({"key1":{$gt:2000}})
$gte大於或等於 $lt小於 $lte小於等於 $ne 不等於
指定一個匹配的數組
db.testDB.find({"key1":{$in:[1,2,3,4]}}) //相似的又$nin
匹配文檔全部屬性$all
db.testDB.find({"key1":{$all:[1,2,3,4]}})
在文檔中搜索多個表達
db.testDB.find({$or:[{"key1":"values1"},{"key2":"values2"}]}) //$nor
使用$slice獲取文檔
db.testDB.find({"key1":"values1"},{"Cast":{$slice:3}}) //獲取前3項,負數爲後N個
相似LIMT n,m
搜索奇數和偶數$MOD
db.testDB.find({"key1":"values1"},{"Cast":{$mod:[2,0]}})
使用$size過濾結果:過濾出文檔中數組大小
db.testDB.find({"key1":{$size:2}})
返回含有特定字段的對象:$EXISTS (全表掃描,不能使用索引)
db.testDB.find({"key1":{$exists:true}})
基於bson類型匹配結果:$type能夠基於BSON類型匹配結果:
db.testDB.find({"key1":{$type:3}})
匹配完整的數組 $elemMatch操做符

使用正則表達式
db.testDB.find({"key1":/^Sharesoe*/i})

更新數據
使用update()更新操做,該函數接受3個主要參數:criteria、objNew和options
參數criteria可用於指定一個查詢
參數objNew指定更新信息
參數options用於指定更新文檔時的選項,有upsert和multi,upsert有更新的就更新無更新就就建立,multi能夠指定是否應該更新全部匹配的文檔或只更新第一個文檔
db.testDB.updateOne({"key1":"values"},{"Tilte":1},{upsert:true}) //可使用save()命令實現upsert
db.testDB.save({"key1":"values"},{"Tilte":1})
##此更新會致使多餘的key-value被刪除
使用$inc增長值
db.testDB.updateOne({"key1":"values"},{$inc:{"Tilte":5}})
更新指定的值
db.testDB.updateOne({"key1":"values"},{$set:{"Tilte":"sharesoe.com"})
刪除指定字段
db.testDB.updateOne({"key1":"values"},{$unset:{"Tilte":1})
在指定字段中添加某個值$push,或多個值用$each
db.testDB.updateOne({"key1":"values"},{$push:{"Tilte2":"haha"}})
db.testDB.updateOne({"key1":"values"},{$push:{"Tilte2":{$each:["haha",1,2,3]}}})
數組中添加數據
db.testDB.updateOne({"key1":"values"},{$addToSet:{"Tilte2":{$each:["haha",1,2,3]}}})
數組中刪除元素
db.testDB.updateOne({"key1":"values"},{$pop:{"Tilte2":1}}) //正數是最後一個元素
刪除數組中指定值、多個值
db.testDB.save({"key1":"values"},{$pull:{"Tilte2":"haha"}}})
db.testDB.updateOne({"key1":"values"},{$pullAll:{"Tilte2":["haha",1,2,3]}}})

批處理數據
MONGODB數據的批處理分爲有序處理和無序,有序處理數據過程發生錯誤後就中止剩下數據的寫入,無序操做以並行方式處理,若錯誤會執行其餘的數據
有序實現
var bulk=initializeOrderBulkOp() //初始化有序列表
插入有序列表bulk,最後執行execute()
bulk.insertOne(xx)
bulk.execute()
評估輸出:執行execute()命令後,就可以審查執行寫入操做,評估是否成功寫入了全部數據,經過getOperations()
bulk.getOperations()
batchTYPE 1 insert 2 update 3 remove
重命名集合
db.testDB.renameCollection("newname")
刪除數據一條或多條
db.newname.deleteOne({"key1":"values"}) //刪除匹配一個文檔
db.newname.deleteMany({})
刪除集合的全部文檔
db.newname.drop() //removed
刪除集合
db.dropDatabase()

相關文章
相關標籤/搜索