a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 數(shù)據(jù)庫(kù) > MongoDB > 正文

MongoDB常用的數(shù)據(jù)類型有哪一些?如何操作?

2024-09-07 00:22:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
        MongoDB常用數(shù)據(jù)類型有哪些?這個(gè)問(wèn)題對(duì)于剛接觸MongoDB數(shù)據(jù)庫(kù)的朋友來(lái)說(shuō)可能不是和清楚,下面小編就給大家介紹一下關(guān)于MongoDB常用的數(shù)據(jù)類型以及基本操作,感興趣的朋友就繼續(xù)往下看吧。
 
        NO.1 MongoDB的常用數(shù)據(jù)類型
        MongoDB中的文檔類似json,我們知道,在json中,最常用的數(shù)據(jù)類型有null、bool、數(shù)組、字符串、數(shù)據(jù)、json對(duì)象等等。相對(duì)比較少,比如對(duì)于時(shí)間類型的數(shù)據(jù),json是無(wú)法表示的,而MongoDB中對(duì)json進(jìn)行了簡(jiǎn)單的優(yōu)化,像json,但是又不是json。下面我們慢慢說(shuō)
 
        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ù)來(lái)表示整數(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)景下的性能,通過(guò)自身生成方式來(lái)產(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ì)元開(kāi)始的毫秒數(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)于集合,最常見(jiàn)的操作就是上面幾個(gè)。查詢集合、創(chuàng)建集合、刪除集合。
 
        再來(lái)看文檔相關(guān)的操作:
        1、插入文檔
        上面的例子中,我們使用insert操作已經(jīng)演示了插入文檔的方法。我把兩種常見(jiàn)的方法寫在一起:
 
方法一:直接插入文檔
> 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、查詢文檔
        查詢文檔的方法比較多,展開(kāi)來(lái)說(shuō)可以說(shuō)很久,就像我們的SQL語(yǔ)法一樣,有各種各樣的寫法,這里先說(shuō)下最簡(jiǎn)單的,查找所有對(duì)象、查找一條對(duì)象,或者查找某一條對(duì)象的方法??蠢樱?br /> 
#查找所有記錄
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
{ "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }
>
>
#查找一條記錄
> db.aaa.findOne()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
 
#帶過(guò)濾條件的,查找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" }
        如果不想要過(guò)濾條件,可以直接使用:
 
        db.aaa.remove()來(lái)刪除所有的記錄。
 
        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
 
#再次替換原來(lái)的文檔
> 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ì)有問(wèn)題,但是在條件不唯一匹配的場(chǎng)景下,可能存在一些隱患,下次我們?cè)俜窒?,今天就先這么點(diǎn)兒吧。

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 涩涩在线| 福利视频网址导航 | 守护甜心中文版 | 免费中文字幕日韩欧美 | 成人二区 | 国产精品色综合 | 中文一区 | 成人久久久精品乱码一区二区三区 | 亚洲人成在线观看 | 一级片在线观看网站 | 成人免费淫片视频观 | 国产精品久久久久国产a级 日韩在线二区 | 久久精品免费一区二区三区 | 国产在线一区二区 | 日本在线视频观看 | 色丁香婷婷 | 亚洲精品在线播放视频 | 久久免费精品视频 | 一区二区三区精品视频 | 国产精品原创巨作av色鲁 | 一区二区国产精品 | 国产第99页 | 三级黄色片在线 | 国产午夜精品一区二区 | 中文字幕日韩av | 日本亚洲国产一区二区三区 | 久久99国产一区二区三区 | 欧美视频区| 九九久久99| 亚洲视频精品一区 | 久久久久久久亚洲精品 | 日日射天天干 | 最新日韩av| 日韩电影在线播放 | 国产精品久久久免费看 | 精品无人乱码一区二区三区 | 亚洲国产精品精华液网站 | 特级毛片在线 | 欧美成人免费在线视频 | 97香蕉久久国产超碰青草软件 | www.色综合|