MongoDB 常用的數(shù)據(jù)類型和基本操作
NO.1 MongoDB的常用數(shù)據(jù)類型
MongoDB中的文檔類似json,我們知道,在json中,最常用的數(shù)據(jù)類型有null、bool、數(shù)組、字符串、數(shù)據(jù)、json對(duì)象等等。相對(duì)比較少,比如對(duì)于時(shí)間類型的數(shù)據(jù),json是無法表示的,而MongoDB中對(duì)json進(jìn)行了簡(jiǎn)單的優(yōu)化,像json,但是又不是json。下面我們慢慢說
MongoDB的常用數(shù)據(jù)類型和MySQL比較像,你可以對(duì)比著看。它的常用數(shù)據(jù)類型有:
1、null
用于表示空值或者不存在的字段
{"x":null}
2、bool
這個(gè)容易理解,true or false
{"x":true}
3、整數(shù)
在MongoDB自帶的shell中不可用,shell中的需要使用函數(shù)來表示整數(shù),如下:
{"x":NumberInt("3")}
如果我們寫成
{"x":3}
這里的3會(huì)被表示成double。
4、字符串
最常用的數(shù)據(jù)類型
{"x":"string"}
5、對(duì)象id
對(duì)象id是12字節(jié)的唯一ID
{"x":ObjectId()}
在MongoDB的數(shù)據(jù)記錄里面,也就是文檔里面,必須有一個(gè)_id鍵,這個(gè)_id鍵你可以簡(jiǎn)單理解為唯一標(biāo)識(shí),類似MySQL中的自增主鍵,但是它一般不設(shè)置成自增的,因?yàn)樵诜植际江h(huán)境中,同步自動(dòng)增加主鍵值既費(fèi)時(shí)又費(fèi)力,MongoDB為了保證分布式場(chǎng)景下的性能,通過自身生成方式來產(chǎn)生_id,_id的類型,稱之為ObjectId類型。
該類型使用12字節(jié)的存儲(chǔ)空間,每個(gè)字節(jié)里面是2位16進(jìn)制的數(shù)字,是一個(gè)24位的字符串。這12個(gè)字節(jié)的生成方式如下:
0、1、2、3位是時(shí)間戳,提供秒級(jí)別唯一性
4、5、6位是機(jī)器的唯一標(biāo)識(shí)符,提供機(jī)器級(jí)別唯一性
7、8位是當(dāng)前生成ObjectId的進(jìn)程標(biāo)識(shí)符,保證不同進(jìn)程的唯一性
9、10、11位是一個(gè)計(jì)數(shù)器,保證同一秒相同進(jìn)程產(chǎn)生的ObjectId的唯一性。
6、日期類型
日期類型存儲(chǔ)的是從標(biāo)準(zhǔn)紀(jì)元開始的毫秒數(shù),不存儲(chǔ)時(shí)區(qū)。
{"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、數(shù)組
值的集合或者列表可以表示成數(shù)組
{"x":["a","b","c"]}
8、內(nèi)嵌文檔
文檔可以包含別的文檔
{"x":{"foo":"bar"}}
9、代碼
文檔中可以包含JavaScript代碼
{"x":function(){/*-----*/}}
NO.2 集合文檔的基本操作
這塊兒可能是比較關(guān)鍵的部分了,在MySQL中,增刪改查是最最基礎(chǔ)的功能,在MongoDB中,這些技能也是必備的。
集合相關(guān)操作
1、查詢集合
查看當(dāng)前數(shù)據(jù)庫(kù)下面的集合,可以使用show collections命令。
2、創(chuàng)建集合
在MongoDB中,不需要單獨(dú)創(chuàng)建集合,一般情況下,只要我們直接將文檔插入到集合中,就可以看到集合自動(dòng)生成了,舉個(gè)例子:
> show collections # 查看集合 num person > db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) > show collections #查看集合,發(fā)現(xiàn)aaa這個(gè)集合生成了 aaa num person
3、刪除集合
> show collections aaa num person > > db.aaa.drop() #刪除集合 true > show collections num person
關(guān)于集合,最常見的操作就是上面幾個(gè)。查詢集合、創(chuàng)建集合、刪除集合。
再來看文檔相關(guān)的操作:
1、插入文檔
上面的例子中,我們使用insert操作已經(jīng)演示了插入文檔的方法。我把兩種常見的方法寫在一起:
方法一:直接插入文檔 > db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) 方法二:將文檔保存在變量里面,插入變量 > record={"name":"zhangsan"} { "name" : "zhangsan" } > db.aaa.insert(record) WriteResult({ "nInserted" : 1 }) 查找集合所有內(nèi)容 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }
2、查詢文檔
查詢文檔的方法比較多,展開來說可以說很久,就像我們的SQL語(yǔ)法一樣,有各種各樣的寫法,這里先說下最簡(jiǎn)單的,查找所有對(duì)象、查找一條對(duì)象,或者查找某一條對(duì)象的方法??蠢樱?/p>
#查找所有記錄 > 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、刪除記錄
刪除記錄的方法也比較簡(jiǎn)單,如下:
#查找所有記錄 > 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中有些麻煩,例如下面的場(chǎng)景
#查找所有記錄 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" } #用一個(gè)變量表示要修改的文檔 > record={"name" : "yeyz","age":18} { "name" : "yeyz", "age" : 18 } #用剛才的變量替換匹配條件的結(jié)果 > 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" }
上面的方法在條件唯一匹配的時(shí)候不會(huì)有問題,但是在條件不唯一匹配的場(chǎng)景下,可能存在一些隱患,下次我們?cè)俜窒?,今天就先這么點(diǎn)兒吧。
每天的內(nèi)容不多,慢慢來,一點(diǎn)一點(diǎn)搞懂它。。。晚安嘍。
以上就是MongoDB 常用的數(shù)據(jù)類型和基本操作的詳細(xì)內(nèi)容,更多關(guān)于MongoDB 數(shù)據(jù)類型和基本操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java將日期類型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類型數(shù)據(jù)
- Mongodb 利用mongoshell進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn)方法
- 基于MongoDB數(shù)據(jù)庫(kù)的數(shù)據(jù)類型和$type操作符詳解
- mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
- Mongodb 數(shù)據(jù)類型及Mongoose常用CURD
- MongoDB支持的java數(shù)據(jù)類型和測(cè)試?yán)?/a>
- MongoDB常用數(shù)據(jù)類型分享
相關(guān)文章
MongoDB磁盤空間占滿導(dǎo)致數(shù)據(jù)庫(kù)被鎖定的解決方法
我在實(shí)際項(xiàng)目中,遇到一個(gè)問題,隨著數(shù)據(jù)每天的不斷增加,導(dǎo)致mongodb的磁盤空間站滿了,數(shù)據(jù)庫(kù)被鎖了,無法使用,所以本文給大家介紹了清理MongoDB數(shù)據(jù)和磁盤空間的方法,需要的朋友可以參考下2024-04-04mongodb增量備份腳本的實(shí)現(xiàn)和原理詳解
MongoDB本身不支持增量備份,所以這里介紹我找到的方法,下面這篇文章主要給大家介紹了關(guān)于mongodb增量備份腳本的實(shí)現(xiàn)和原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09mongodb中ObjectId和ObjectIdr實(shí)現(xiàn)
本文主要介紹了mongodb中ObjectId和ObjectIdr實(shí)現(xiàn)2023-12-12MongoDB存儲(chǔ)時(shí)間時(shí)差問題的解決方法
這篇文章主要給大家介紹了關(guān)于MongoDB存儲(chǔ)時(shí)間時(shí)差問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mongodb具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09Mongodb使用$pop刪除數(shù)組中元素的操作指南
本文描述怎樣從Mongodb的文檔數(shù)組字段中,使用$pop刪除數(shù)組中的元素,文中通過代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06mongodb root用戶創(chuàng)建數(shù)據(jù)庫(kù)提示not master的解決
這篇文章主要介紹了mongodb root用戶創(chuàng)建數(shù)據(jù)庫(kù)提示not master的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-02-02mongose 模糊檢索實(shí)現(xiàn)方法示例詳解
這篇文章主要為大家介紹了mongose 模糊檢索實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08