MongoDB 常用的數據類型和基本操作
NO.1 MongoDB的常用數據類型
MongoDB中的文檔類似json,我們知道,在json中,最常用的數據類型有null、bool、數組、字符串、數據、json對象等等。相對比較少,比如對於時間類型的數據,json是無法表示的,而MongoDB中對json進行瞭簡單的優化,像json,但是又不是json。下面我們慢慢說
MongoDB的常用數據類型和MySQL比較像,你可以對比著看。它的常用數據類型有:
1、null
用於表示空值或者不存在的字段
{“x”:null}
2、bool
這個容易理解,true or false
{“x”:true}
3、整數
在MongoDB自帶的shell中不可用,shell中的需要使用函數來表示整數,如下:
{“x”:NumberInt(“3”)}
如果我們寫成
{“x”:3}
這裡的3會被表示成double。
4、字符串
最常用的數據類型
{“x”:”string”}
5、對象id
對象id是12字節的唯一ID
{“x”:ObjectId()}
在MongoDB的數據記錄裡面,也就是文檔裡面,必須有一個_id鍵,這個_id鍵你可以簡單理解為唯一標識,類似MySQL中的自增主鍵,但是它一般不設置成自增的,因為在分佈式環境中,同步自動增加主鍵值既費時又費力,MongoDB為瞭保證分佈式場景下的性能,通過自身生成方式來產生_id,_id的類型,稱之為ObjectId類型。
該類型使用12字節的存儲空間,每個字節裡面是2位16進制的數字,是一個24位的字符串。這12個字節的生成方式如下:
0、1、2、3位是時間戳,提供秒級別唯一性
4、5、6位是機器的唯一標識符,提供機器級別唯一性
7、8位是當前生成ObjectId的進程標識符,保證不同進程的唯一性
9、10、11位是一個計數器,保證同一秒相同進程產生的ObjectId的唯一性。
6、日期類型
日期類型存儲的是從標準紀元開始的毫秒數,不存儲時區。
{“x”:new Data()}
示例如下:
> db.num.insert({"age": new Date()}) WriteResult({ "nInserted" : 1 }) > db.num.find() { "_id" : ObjectId("5f96b5e15e5c5ff982b9c6af"), "age" : 28 } { "_id" : ObjectId("5f9835d0f24f04e23fb63878"), "age" : 3 } { "_id" : ObjectId("5f983621f24f04e23fb63879"), "age" : 3 } { "_id" : ObjectId("5f9838d2f24f04e23fb6387a"), "age" : ISODate("2020-10-27T15:12:18.739Z") }
7、數組
值的集合或者列表可以表示成數組
{“x”:[“a”,”b”,”c”]}
8、內嵌文檔
文檔可以包含別的文檔
{“x”:{“foo”:”bar”}}
9、代碼
文檔中可以包含JavaScript代碼
{“x”:function(){/*—–*/}}
NO.2 集合文檔的基本操作
這塊兒可能是比較關鍵的部分瞭,在MySQL中,增刪改查是最最基礎的功能,在MongoDB中,這些技能也是必備的。
集合相關操作
1、查詢集合
查看當前數據庫下面的集合,可以使用show collections命令。
2、創建集合
在MongoDB中,不需要單獨創建集合,一般情況下,隻要我們直接將文檔插入到集合中,就可以看到集合自動生成瞭,舉個例子:
> show collections # 查看集合 num person > db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) > show collections #查看集合,發現aaa這個集合生成瞭 aaa num person
3、刪除集合
> show collections aaa num person > > db.aaa.drop() #刪除集合 true > show collections num person
關於集合,最常見的操作就是上面幾個。查詢集合、創建集合、刪除集合。
再來看文檔相關的操作:
1、插入文檔
上面的例子中,我們使用insert操作已經演示瞭插入文檔的方法。我把兩種常見的方法寫在一起:
方法一:直接插入文檔 > db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) 方法二:將文檔保存在變量裡面,插入變量 > record={"name":"zhangsan"} { "name" : "zhangsan" } > db.aaa.insert(record) WriteResult({ "nInserted" : 1 }) 查找集合所有內容 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }
2、查詢文檔
查詢文檔的方法比較多,展開來說可以說很久,就像我們的SQL語法一樣,有各種各樣的寫法,這裡先說下最簡單的,查找所有對象、查找一條對象,或者查找某一條對象的方法。看例子:
#查找所有記錄 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" } > > #查找一條記錄 > db.aaa.findOne() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } #帶過濾條件的,查找name=zhangsan的記錄 > db.aaa.find({"name":"zhangsan"}) { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }
3、刪除記錄
刪除記錄的方法也比較簡單,如下:
#查找所有記錄 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" } #刪除name=zhangsan的記錄 > db.aaa.remove({"name":"zhangsan"}) WriteResult({ "nRemoved" : 1 }) > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } # 僅剩name=yeyz的一條記錄 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
如果不想要過濾條件,可以直接使用:
db.aaa.remove()來刪除所有的記錄。
4、更新記錄
更新記錄,在MongoDB中有些麻煩,例如下面的場景
#查找所有記錄 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" } #用一個變量表示要修改的文檔 > record={"name" : "yeyz","age":18} { "name" : "yeyz", "age" : 18 } #用剛才的變量替換匹配條件的結果 > db.aaa.update({"name" : "yeyz"},record) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 18 } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" } # 修改變量的age屬性 > record.age=20 20 #再次替換原來的文檔 > db.aaa.update({"name" : "yeyz"},record) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 20 } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" }
上面的方法在條件唯一匹配的時候不會有問題,但是在條件不唯一匹配的場景下,可能存在一些隱患,下次我們再分享,今天就先這麼點兒吧。
每天的內容不多,慢慢來,一點一點搞懂它。。。晚安嘍。
以上就是MongoDB 常用的數據類型和基本操作的詳細內容,更多關於MongoDB 數據類型和基本操作的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 詳解MongoDB范圍片鍵和哈希片鍵
- mongodb中oplog介紹和格式詳析
- MongoDB 簡單入門教程(安裝、基本概念、創建用戶)
- MongoDB實現創建刪除數據庫、創建刪除表(集合 )、數據增刪改查
- 使用MongoDB操作文檔