文檔型數(shù)據(jù)庫(kù)MongoDB是怎樣的,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)是少有的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、營(yíng)銷型企業(yè)網(wǎng)站、小程序開(kāi)發(fā)、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、賣鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,成立于2013年,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶好評(píng)
MongoDB 是一個(gè)跨平臺(tái)的,面向文檔的數(shù)據(jù)庫(kù),是當(dāng)前 NOSQL 數(shù)據(jù)庫(kù)產(chǎn)品中最熱門的一種。它介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的產(chǎn)品。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似 JSON 的 BSON 格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。 MongoDB 的官方網(wǎng)站地址是:http://www.mongodb.org/
MongoDB 最大的特點(diǎn)是他支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο?的查 詢語(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建 立索 引。它是一個(gè)面向集合的,模式自由的文檔型數(shù)據(jù)庫(kù)。 具體特點(diǎn)總結(jié)如下:
(1)面向集合存儲(chǔ),易于存儲(chǔ)對(duì)象類型的數(shù)據(jù)
(2)模式自由
(3)支持動(dòng)態(tài)查詢
(4)支持完全索引,包含內(nèi)部對(duì)象
(5)支持復(fù)制和故障恢復(fù)
(6)使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻等)
(7)自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性
(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++語(yǔ)言的驅(qū)動(dòng)程序,社區(qū)中也提供了對(duì) Erlang 及.NET 等平臺(tái)的驅(qū)動(dòng)程序
(9) 文件存儲(chǔ)格式為 BSON(一種 JSON 的擴(kuò)展)
MongoDB 的邏輯結(jié)構(gòu)是一種層次結(jié)構(gòu)。主要由: 文檔(document)、集合(collection)、數(shù)據(jù)庫(kù)(database)這三部分組成的。邏輯結(jié)構(gòu)是面向用戶的,用戶使用 MongoDB 開(kāi)發(fā)應(yīng)用程序使用的就是邏輯結(jié)構(gòu)。
(1)MongoDB 的文檔(document),相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的一行記錄。
(2)多個(gè)文檔組成一個(gè)集合(collection),相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)的表。
(3)多個(gè)集合(collection),邏輯上組織在一起,就是數(shù)據(jù)庫(kù)(database)。
(4)一個(gè) MongoDB 實(shí)例支持多個(gè)數(shù)據(jù)庫(kù)(database)。 文檔(document)、集合(collection)、數(shù)據(jù)庫(kù)(database)的層次結(jié)構(gòu)如下圖:
下表是MongoDB與MySQL數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)概念的對(duì)比
基本數(shù)據(jù)類型
null:用于表示空值或者不存在的字段,{“x”:null}
布爾型:布爾類型有兩個(gè)值true和false,{“x”:true}
數(shù)值:shell默認(rèn)使用64為浮點(diǎn)型數(shù)值。{“x”:3.14}或{“x”:3}。對(duì)于整型值,可以使用 NumberInt(4字節(jié)符號(hào)整數(shù))或NumberLong(8字節(jié)符號(hào)整數(shù)), {“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
字符串:UTF-8字符串都可以表示為字符串類型的數(shù)據(jù),{“x”:“呵呵”}
日期:日期被存儲(chǔ)為自新紀(jì)元依賴經(jīng)過(guò)的毫秒數(shù),不存儲(chǔ)時(shí)區(qū),{“x”:new Date()}
正則表達(dá)式:查詢時(shí),使用正則表達(dá)式作為限定條件,語(yǔ)法與JavaScript的正則表達(dá)式相 同,{“x”:/[abc]/}
數(shù)組:數(shù)據(jù)列表或數(shù)據(jù)集可以表示為數(shù)組,{“x”: [“a“,“b”,”c”]}
內(nèi)嵌文檔:文檔可以嵌套其他文檔,被嵌套的文檔作為值來(lái)處理,{“x”:{“y”:3 }}
對(duì)象Id:對(duì)象id是一個(gè)12字節(jié)的字符串,是文檔的唯一標(biāo)識(shí),{“x”: objectId() }
二進(jìn)制數(shù)據(jù):二進(jìn)制數(shù)據(jù)是一個(gè)任意字節(jié)的字符串。它不能直接在shell中使用。如果要 將非utf-字符保存到數(shù)據(jù)庫(kù)中,二進(jìn)制數(shù)據(jù)是唯一的方式。 代碼:查詢和文檔中可以包括任何JavaScript代碼,{“x”:function(){/…/}}
安裝 雙擊“資源\微服務(wù)相關(guān)\配套軟件\mongodb”中的“mongodb-win32-x86_64-2008plusssl- 3.2.10-signed.msi” 按照提示步驟安裝即可。安裝完成后,軟件會(huì)安裝在C:\Program Files\MongoDB 目錄中。
我們要啟動(dòng)的服務(wù)程序就是C:\Program Files\MongoDB\Server\3.2\bin目錄下的 mongod.exe,為了方便我們每次啟動(dòng),我將C:\Program Files\MongoDB\Server\3.2\bin 設(shè)置到環(huán)境變量path中。
啟動(dòng)
(1)首先打開(kāi)命令提示符,創(chuàng)建一個(gè)用于存放數(shù)據(jù)的目錄
md d:\data
(2)啟動(dòng)服務(wù)
mongod ‐‐dbpath=d:\data
我們?cè)趩?dòng)信息中可以看到,mongoDB的默認(rèn)端口是27017 如果我們想改變默認(rèn)的啟動(dòng)端口,可以通過(guò)--port來(lái)指定端口 在命令提示符輸入以下命令即可完成登陸
mongo
退出mongodb
exit
選擇和創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法格式:
use 數(shù)據(jù)庫(kù)名稱
如果數(shù)據(jù)庫(kù)不存在則自動(dòng)創(chuàng)建 以下語(yǔ)句創(chuàng)建spit數(shù)據(jù)庫(kù)
use spitdb
插入文檔的語(yǔ)法格式:
db.集合名稱.insert(數(shù)據(jù));
我們這里可以插入以下測(cè)試數(shù)據(jù):
db.spit.insert({content:"聽(tīng)說(shuō)十次方課程很給力呀",userid:"1011",nickname:"小雅",visits:NumberInt(902)})
查詢集合的語(yǔ)法格式:
db.集合名稱.find()
如果我們要查詢spit集合的所有文檔,我們輸入以下命令
db.spit.find()
這里你會(huì)發(fā)現(xiàn)每條文檔會(huì)有一個(gè)叫_id的字段,這個(gè)相當(dāng)于我們?cè)瓉?lái)關(guān)系數(shù)據(jù)庫(kù)中表的主 鍵,當(dāng)你在插入文檔記錄時(shí)沒(méi)有指定該字段,MongoDB會(huì)自動(dòng)創(chuàng)建,其類型是ObjectID 類型。如果我們?cè)诓迦胛臋n記錄時(shí)指定該字段也可以,其類型可以是ObjectID類型,也 可以是MongoDB支持的任意類型。
輸入以下測(cè)試語(yǔ)句:
db.spit.insert({_id:"1",content:"我還是沒(méi)有想明白到底為啥出錯(cuò)",userid:"1012",nickname:"小明",visits:NumberInt(2020)}); db.spit.insert({_id:"2",content:"加班到半夜",userid:"1013",nickname:"凱撒",visits:NumberInt(1023)}); db.spit.insert({_id:"3",content:"手機(jī)流量超了咋辦?",userid:"1013",nickname:"凱撒",visits:NumberInt(111)}); db.spit.insert({_id:"4",content:"堅(jiān)持就是勝利",userid:"1014",nickname:"諾諾",visits:NumberInt(1223)});
如果我想按一定條件來(lái)查詢,比如我想查詢userid為1013的記錄,怎么辦?很簡(jiǎn)單!只 要在find()中添加參數(shù)即可,參數(shù)也是json格式,如下:
db.spit.find({userid:'1013'})
如果你只需要返回符合條件的第一條數(shù)據(jù),我們可以使用findOne命令來(lái)實(shí)現(xiàn)
db.spit.findOne({userid:'1013'})
如果你想返回指定條數(shù)的記錄,可以在find方法后調(diào)用limit來(lái)返回結(jié)果,例如:
db.spit.find().limit(3)
修改文檔的語(yǔ)法結(jié)構(gòu):
db.集合名稱.update(條件,修改后的數(shù)據(jù))
如果我們想修改_id為1的記錄,瀏覽量為1000,輸入以下語(yǔ)句:
db.spit.update({_id:"1"},{visits:NumberInt(1000)})
執(zhí)行后,我們會(huì)發(fā)現(xiàn),這條文檔除了visits字段其它字段都不見(jiàn)了,為了解決這個(gè)問(wèn)題, 我們需要使用修改器$set來(lái)實(shí)現(xiàn),命令如下:
db.spit.update({_id:"2"},{$set:{visits:NumberInt(2000)}})
這樣就OK啦。
刪除文檔的語(yǔ)法結(jié)構(gòu):
db.集合名稱.remove(條件)
以下語(yǔ)句可以將數(shù)據(jù)全部刪除,請(qǐng)慎用
db.spit.remove({})
如果刪除visits=1000的記錄,輸入以下語(yǔ)句
db.spit.remove({visits:1000})
統(tǒng)計(jì)記錄條件使用count()方法。以下語(yǔ)句統(tǒng)計(jì)spit集合的記錄數(shù)
db.spit.count()
如果按條件統(tǒng)計(jì) ,例如:統(tǒng)計(jì)userid為1013的記錄條數(shù)
db.spit.count({userid:"1013"})
MongoDB的模糊查詢是通過(guò)正則表達(dá)式的方式實(shí)現(xiàn)的。格式為:
/模糊查詢字符串/
例如,我要查詢吐槽內(nèi)容包含“流量”的所有文檔,代碼如下:
db.spit.find({content:/流量/})
如果要查詢吐槽內(nèi)容中以“加班”開(kāi)頭的,代碼如下:
db.spit.find({content:/^加班/})
<, <=, >, >= 這個(gè)操作符也是很常用的,格式如下:
db.集合名稱.find({ "field" : { $gt: value }}) // 大于: field > value db.集合名稱.find({ "field" : { $lt: value }}) // 小于: field < value db.集合名稱.find({ "field" : { $gte: value }}) // 大于等于: field >= value db.集合名稱.find({ "field" : { $lte: value }}) // 小于等于: field <= value db.集合名稱.find({ "field" : { $ne: value }}) // 不等于: field != value
示例:查詢吐槽瀏覽量大于1000的記錄
db.spit.find({visits:{$gt:1000}})
包含使用$in操作符。
示例:查詢吐槽集合中userid字段包含1013和1014的文檔
db.spit.find({userid:{$in:["1013","1014"]}})
不包含使用$nin操作符。
示例:查詢吐槽集合中userid字段不包含1013和1014的文檔
db.spit.find({userid:{$nin:["1013","1014"]}})
我們?nèi)绻枰樵兺瑫r(shí)滿足兩個(gè)以上條件,需要使用$and操作符將條件進(jìn)行關(guān)聯(lián)。(相當(dāng)于SQL的and)
格式為:
$and:[ { },{ },{ } ]
示例:查詢吐槽集合中visits大于等于1000 并且小于2000的文檔
db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})
如果兩個(gè)以上條件之間是或者的關(guān)系,我們使用or操作符進(jìn)行關(guān)聯(lián),與前面and的使用方式相同格式為:
$or:[ { },{ },{ } ]
示例:查詢吐槽集合中userid為1013,或者瀏覽量小于2000的文檔記錄
db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})
如果我們想實(shí)現(xiàn)對(duì)某列值在原有值的基礎(chǔ)上進(jìn)行增加或減少,可以使用$inc運(yùn)算符來(lái)實(shí)現(xiàn)
db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )
mongodb-driver是mongo官方推出的java連接mongoDB的驅(qū)動(dòng)包,相當(dāng)于JDBC驅(qū)動(dòng)。我們通過(guò)一個(gè)入門的案例來(lái)了解mongodb-driver的基本使用
(1)創(chuàng)建工程 mongoDemo, 引入依賴
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb‐driver</artifactId> <version>3.6.3</version> </dependency> </dependencies>
(2)創(chuàng)建測(cè)試類
/** * MongoDb入門小demo */ public class MongoDemo { public static void main(String[] args) { MongoClient client=new MongoClient("192.168.184.134");//創(chuàng)建連接 MongoDatabase spitdb = client.getDatabase("spitdb");//打開(kāi)數(shù)據(jù)庫(kù) MongoCollection<Document> spit = spitdb.getCollection("spit");// 獲取集合 FindIterable<Document> documents = spit.find();//查詢記錄獲取文檔集 合 for(Document document:documents){ // System.out.println("內(nèi)容:"+ document.getString("content")); System.out.println("用戶ID:"+document.getString("userid")); System.out.println("瀏覽量:"+document.getInteger("visits")); } client.close();//關(guān)閉連接 } }
BasicDBObject對(duì)象:表示一個(gè)具體的記錄,BasicDBObject實(shí)現(xiàn)了DBObject,是keyvalue 的數(shù)據(jù)結(jié)構(gòu),用起來(lái)和HashMap是基本一致的。
(1)查詢userid為1013的記錄
public class MongoDemo1 { public static void main(String[] args) { MongoClient client=new MongoClient("192.168.184.134");//創(chuàng)建連接 MongoDatabase spitdb = client.getDatabase("spitdb");//打開(kāi)數(shù)據(jù)庫(kù) MongoCollection<Document> spit = spitdb.getCollection("spit");// 獲取集合 BasicDBObject bson=new BasicDBObject("userid","1013");// 構(gòu)建查詢 條件 FindIterable<Document> documents = spit.find(bson);//查詢記錄獲取結(jié) 果集合 for(Document document:documents){ // System.out.println("內(nèi)容:"+ document.getString("content")); System.out.println("用戶ID:"+document.getString("userid")); System.out.println("瀏覽量:"+document.getInteger("visits")); } client.close();//關(guān)閉連接 } }
(2)查詢?yōu)g覽量大于1000的記錄
public class MongoDemo2 { public static void main(String[] args) { MongoClient client=new MongoClient("192.168.184.134");//創(chuàng)建連接 MongoDatabase spitdb = client.getDatabase("spitdb");//打開(kāi)數(shù)據(jù)庫(kù) MongoCollection<Document> spit = spitdb.getCollection("spit");// 獲取集合 BasicDBObject bson=new BasicDBObject("visits",new BasicDBObject("$gt",1000) );// 構(gòu)建查詢條件 FindIterable<Document> documents = spit.find(bson);//查詢記錄獲取結(jié) 果集合 for(Document document:documents){ // System.out.println("內(nèi)容:"+ document.getString("content")); System.out.println("用戶ID:"+document.getString("userid")); System.out.println("瀏覽量:"+document.getInteger("visits")); } client.close();//關(guān)閉連接 } }
public class MongoDemo3 { public static void main(String[] args) { MongoClient client=new MongoClient("192.168.184.134");//創(chuàng)建連接 MongoDatabase spitdb = client.getDatabase("spitdb");//打開(kāi)數(shù)據(jù)庫(kù) MongoCollection<Document> spit = spitdb.getCollection("spit");// 獲取集合 Map<String,Object> map=new HashMap(); map.put("content","我要吐槽"); map.put("userid","9999"); map.put("visits",123); map.put("publishtime",new Date()); Document document=new Document(map); spit.insertOne(document);//插入數(shù)據(jù) client.close(); } }
看完上述內(nèi)容,你們掌握文檔型數(shù)據(jù)庫(kù)MongoDB是怎樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享名稱:文檔型數(shù)據(jù)庫(kù)MongoDB是怎樣的
鏈接URL:http://m.rwnh.cn/article2/jejgic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、域名注冊(cè)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站排名、網(wǎng)站維護(hù)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)