Mongodb大資料文法大全

來源:互聯網
上載者:User

標籤:mongodb大資料文法大全

JSON和MONGODB

JSON不止是一種交換資料的方式,也是一種儲存資料的良好方式,實際上MONGODB並未使用JSON儲存資料,而是使用由MONGODB團隊開發的一種稱為BSON的開放資料格式。

面向文檔儲存BSON

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

1、處理資料比JSON快,消耗一定的儲存空間,簡單說BSON更方便瀏覽,遍曆索引頁非常快。

2、使用BSON容易將它資料快速轉換為編程餘元的原生資料格式

3、BSON也提供對JSON的一些擴充,通過BSON可以儲存位元據,以及處理特定的資料類型,因此,BSON可以儲存任何JSON文檔,但有效BSON文檔可能不是有效JSON


瀏覽資料庫

use testDB ? //切換已有資料庫或者建立新的資料庫

查看可用的資料庫和集合

show dbs ? ? //只會顯示出已經存在的資料庫

show collections //顯示當前資料庫中的所有集合

集合中插入資料

最常用的操作就是在集合中插入資料,所有資料都以BSON格式儲存,插入資料可以先定義資料,然後使用insertOne函數將它們儲存在集合中,或使用insert函數臨時輸入文檔內容。

douctment=({"key1":"values"})

db.test.insertOne(douctment)

????插入資料時,鍵名必須遵守如下規則:

????$字元不能是鍵名的第一個字元

????圓點[.]不能出現在鍵中

????名稱_id被保留使用

????集合的名稱不能超過128個字元

????Null 字元串("")不能用作集合名稱

????集合名必須以字母或底線開頭

????集合名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操作符

????

????使用Regex

????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()


Mongodb大資料文法大全

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.