您好,登錄后才能下訂單哦!
小編給大家分享一下MongoDB是什么,優(yōu)缺點(diǎn)有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
一、什么是MongoDB ?
MongoDB 是由C++語(yǔ)言編寫的,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫(kù)系統(tǒng)。
在高負(fù)載的情況下,添加更多的節(jié)點(diǎn),可以保證服務(wù)器性能。
MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。
MongoDB 文檔類似于 JSON 對(duì)象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。
二、MongoDB 優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
·文檔結(jié)構(gòu)的存儲(chǔ)方式,能夠更便捷的獲取數(shù)據(jù)
·內(nèi)置GridFS,支持大容量的存儲(chǔ)
·海量數(shù)據(jù)下,性能優(yōu)越
·動(dòng)態(tài)查詢
·全索引支持,擴(kuò)展到內(nèi)部對(duì)象和內(nèi)嵌數(shù)組
·查詢記錄分析
·快速,就地更新
·高效存儲(chǔ)二進(jìn)制大對(duì)象 (比如照片和視頻)
·復(fù)制(復(fù)制集)和支持自動(dòng)故障恢復(fù)
·內(nèi)置 Auto- Sharding 自動(dòng)分片支持云級(jí)擴(kuò)展性,分片簡(jiǎn)單
·MapReduce 支持復(fù)雜聚合
·商業(yè)支持,培訓(xùn)和咨詢
缺點(diǎn)
·不支持事務(wù)操作
·MongoDB 占用空間過大 (不過這個(gè)確定對(duì)于目前快速下跌的硬盤價(jià)格來說,也不算什么缺點(diǎn)了)
·MongoDB沒有如MySQL那樣成熟的維護(hù)工具
·無法進(jìn)行關(guān)聯(lián)表查詢,不適用于關(guān)系多的數(shù)據(jù)
·復(fù)雜聚合操作通過mapreduce創(chuàng)建,速度慢
·模式自由,自由靈活的文件存儲(chǔ)格式帶來的數(shù)據(jù)錯(cuò)
·MongoDB 在你刪除記錄后不會(huì)在文件系統(tǒng)回收空間。除非你刪掉數(shù)據(jù)庫(kù)。但是空間沒有被浪費(fèi)
三、優(yōu)缺點(diǎn)詳細(xì)解釋
1.內(nèi)置GridFS,支持大容量的存儲(chǔ):
GridFS是一個(gè)出色的分布式文件系統(tǒng),可以支持海量的數(shù)據(jù)存儲(chǔ)。
內(nèi)置了GridFS了MongoDB,能夠滿足對(duì)大數(shù)據(jù)集的快速范圍查詢。
2.內(nèi)置 Auto- Sharding 自動(dòng)分片支持云級(jí)擴(kuò)展性,分片簡(jiǎn)單
提供基于Range的Auto Sharding機(jī)制:
一個(gè)collection可按照記錄的范圍,分成若干個(gè)段,切分到不同的Shard上。
Shards可以和復(fù)制結(jié)合,配合Replica sets能夠?qū)崿F(xiàn)Sharding+fail-over,不同的Shard之間可以負(fù)載均衡。
查詢是對(duì)客戶端是透明的??蛻舳藞?zhí)行查詢,統(tǒng)計(jì),MapReduce等操作,這些會(huì)被MongoDB自動(dòng)路由到后端的數(shù)據(jù)節(jié)點(diǎn)。
這讓我們關(guān)注于自己的業(yè)務(wù),適當(dāng)?shù)?時(shí)候可以無痛的升級(jí)。MongoDB的Sharding設(shè)計(jì)能力最大可支持約20 petabytes,足以支撐一般應(yīng)用。
這可以保證MongoDB運(yùn)行在便宜的PC服務(wù)器集群上。PC集群擴(kuò)充起來非常方便并且成本很低,避免了“sharding”操作的復(fù)雜性和成本。
3.海量數(shù)據(jù)下,性能優(yōu)越:
在使用場(chǎng)合下,千萬(wàn)級(jí)別的文檔對(duì)象,近10G的數(shù)據(jù),對(duì)有索引的ID的查詢不會(huì)比mysql慢,而對(duì)非索引字段的查詢,則是全面勝出。 mysql實(shí)際無法勝任大數(shù)據(jù)量下任意字段的查詢,而mongodb的查詢性能實(shí)在讓我驚訝。寫入性能同樣很令人滿意,同樣寫入百萬(wàn)級(jí)別的數(shù) 據(jù),mongodb比我以前試用過的couchdb要快得多,基本10分鐘以下可以解決。補(bǔ)上一句,觀察過程中mongodb都遠(yuǎn)算不上是CPU殺手。
4.全索引支持,擴(kuò)展到內(nèi)部對(duì)象和內(nèi)嵌數(shù)組
索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢條件的記錄。
這種掃描全集合的查詢效率是非常低的,特別在處理大量的數(shù)據(jù)時(shí),查詢可以要花費(fèi)幾十秒甚至幾分鐘,這對(duì)網(wǎng)站的性能是非常致命的。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲(chǔ)在一個(gè)易于遍歷讀取的數(shù)據(jù)集合中,索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。
5.MapReduce 支持復(fù)雜聚合
MongoDB中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計(jì)平均值,求和等),并返回計(jì)算后的數(shù)據(jù)結(jié)果。有點(diǎn)類似sql語(yǔ)句中的 count(*)。
與關(guān)系型數(shù)據(jù)庫(kù)相比,MongoDB的缺點(diǎn):
mongodb不支持事務(wù)操作:
所以事務(wù)要求嚴(yán)格的系統(tǒng)(如果銀行系統(tǒng))肯定不能用它。
mongodb不支持事務(wù)操作:
所以事務(wù)要求嚴(yán)格的系統(tǒng)(如果銀行系統(tǒng))肯定不能用它。
mongodb占用空間過大:
關(guān)于其原因,在官方的FAQ中,提到有如下幾個(gè)方面:
1、空間的預(yù)分配:為避免形成過多的硬盤碎片,mongodb每次空間不足時(shí)都會(huì)申請(qǐng)生成一大塊的硬盤空間,而且申請(qǐng)的量從64M、128M、256M那 樣的指數(shù)遞增,直到2G為單個(gè)文件的最大體積。隨著數(shù)據(jù)量的增加,你可以在其數(shù)據(jù)目錄里看到這些整塊生成容量不斷遞增的文件。
2、字段名所占用的空間:為了保持每個(gè)記錄內(nèi)的結(jié)構(gòu)信息用于查詢,mongodb需要把每個(gè)字段的key-value都以BSON的形式存儲(chǔ),如果 value域相對(duì)于key域并不大,比如存放數(shù)值型的數(shù)據(jù),則數(shù)據(jù)的overhead是最大的。一種減少空間占用的方法是把字段名盡量取短一些,這樣占用 空間就小了,但這就要求在易讀性與空間占用上作為權(quán)衡了。
3、刪除記錄不釋放空間:這很容易理解,為避免記錄刪除后的數(shù)據(jù)的大規(guī)模挪動(dòng),原記錄空間不刪除,只標(biāo)記“已刪除”即可,以后還可以重復(fù)利用。
4、可以定期運(yùn)行db.repairDatabase()來整理記錄,但這個(gè)過程會(huì)比較緩慢。
MongoDB沒有如MySQL那樣成熟的維護(hù)工具,這對(duì)于開發(fā)和IT運(yùn)營(yíng)都是個(gè)值得注意的地方。
四、安裝與使用
MongoDB 3.6不支持Ubuntu 12.04
本文使用:Ubuntu 16.04 x64
安裝MongoDB的企業(yè)版
1. 導(dǎo)入公鑰
導(dǎo)入包管理系統(tǒng)使用的公鑰。
Ubuntu軟件包管理工具(即dpkg和apt)通過要求分發(fā)者使用GPG密鑰簽署軟件包來確保軟件包的一致性和真實(shí)性,使用以下命令導(dǎo)入。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
2. 創(chuàng)建列表文件
echo "deb [ arch=amd64,arm64,ppc64el,s390x ] http://repo.mongodb.com/apt/ubuntu xenial/mongodb-enterprise/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-enterprise.list
3. 更新倉(cāng)庫(kù)
echo apt-get update
4. 安裝服務(wù)
安裝MongoDB Enterprise軟件包
安裝MongoDB企業(yè)版本3.6
sudo apt-get install -y mongodb-enterprise
指定 3.6.2 版本安裝 MongoDB Enterprise
sudo apt-get install -y mongodb-org=3.6.2 mongodb-org-server=3.6.2 mongodb-org-shell=3.6.2 mongodb-org-mongos =3.6.2 mongodb-org-tools=3.6.2
5. 啟動(dòng)服務(wù)
service mongod start
6. 查看日志
確認(rèn)MongoDB已經(jīng)成功啟動(dòng),查看/var/log/mongodb/mongod.log 日志
less /var/log/mongodb/mongod.log
驗(yàn)證 mongod 已成功啟動(dòng),通過檢查日志文件的內(nèi)容
[initandlisten] waiting for connections on port 27017
<port>是mongod監(jiān)聽的端口。如果您修改了 配置文件中的net.port設(shè)置/etc/mongod.conf,端口可能會(huì)有所不同。
您可能會(huì)在mongod 輸出中看到非嚴(yán)重警告。只要你看到上面顯示的日志行,你可以放心地忽略這些警告。
五、MongoDB 使用
1. 連接 MongoDB
mongo在同一臺(tái)主機(jī)上啟動(dòng)一個(gè)shell mongod。使用--host命令行選項(xiàng)指定mongod 監(jiān)聽的本地主機(jī)地址和端口:
mongo --host 127.0.0.1:27017
MongoDB shell version v3.6.2 connecting to: mongodb://127.0.0.1:27017/ MongoDB server version: 3.6.2 Server has startup warnings: 2018-01-25T12:42:31.472+0000 I STORAGE [initandlisten] 2018-01-25T12:42:31.473+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2018-01-25T12:42:31.473+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes- filesystem 2018-01-25T12:42:31.510+0000 I CONTROL [initandlisten] 2018-01-25T12:42:31.510+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2018-01-25T12:42:31.510+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2018-01-25T12:42:31.510+0000 I CONTROL [initandlisten] 2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] 2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] 2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] > 1+1 2
上面簡(jiǎn)單測(cè)試了:1+1
退出:Ctrl+c
2. MongoDB 創(chuàng)建數(shù)據(jù)庫(kù)
語(yǔ)法
use DATABASE_NAME
創(chuàng)建一個(gè) souyunku 的數(shù)據(jù)庫(kù),使用 db 命令查看
> use souyunku switched to db souyunku > db souyunku >
查看所有數(shù)據(jù)庫(kù)使用show dbs
> show dbs admin 0.000GB config 0.000GB local 0.000GB test 0.000GB >
可以看到,剛創(chuàng)建的數(shù)據(jù)庫(kù) souyunku 并不在數(shù)據(jù)庫(kù)的列表中, 要顯示它,我們需要向 souyunku 數(shù)據(jù)庫(kù)插入一些數(shù)據(jù)。
> db.souyunku.insert({"name":"關(guān)注公眾號(hào),搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享"}) WriteResult({ "nInserted" : 1 }) > show dbs admin 0.000GB config 0.000GB local 0.000GB souyunku 0.000GB test 0.000GB >
MongoDB 中默認(rèn)的數(shù)據(jù)庫(kù)為 test,如果你沒有創(chuàng)建新的數(shù)據(jù)庫(kù),集合將存放在 test 數(shù)據(jù)庫(kù)中。
3. MongoDB 刪除數(shù)據(jù)庫(kù)
MongoDB 刪除數(shù)據(jù)庫(kù)的語(yǔ)法
db.dropDatabase()
實(shí)例
以下操作會(huì)把souyunku 數(shù)據(jù)刪除
查看所有數(shù)據(jù)庫(kù)
> show dbs admin 0.000GB config 0.000GB local 0.000GB souyunku 0.000GB test 0.000GB
切換到souyunku 數(shù)據(jù)庫(kù)
> use souyunku switched to db souyunku
使用db.dropDatabase() 刪除數(shù)據(jù)庫(kù)
> db.dropDatabase() { "dropped" : "souyunku", "ok" : 1 }
看到已經(jīng)刪除了
> show dbs admin 0.000GB config 0.000GB local 0.000GB test 0.000GB >
4. MongoDB 插入文檔
MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語(yǔ)法如下:
db.COLLECTION_NAME.insert(document)
以下文檔可以存儲(chǔ)在 MongoDB 的 souyunku數(shù)據(jù)庫(kù) 的 col 集合中:
切換到souyunku 數(shù)據(jù)庫(kù)
> use souyunku switched to db souyunku
db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)', by: '搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享', url: 'http://www.souyunku.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
> db.col.find()
以上實(shí)例中 col 是我們的集合名,如果該集合不在該數(shù)據(jù)庫(kù)中, MongoDB 會(huì)自動(dòng)創(chuàng)建該集合并插入文檔。
查看已插入文檔:
響應(yīng)
{ "_id": ObjectId("5a69eb32ec3046ee8ae54dbb"), "title": "MongoDB 教程", "description": "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)", "by": "搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享", "url": "http://www.souyunku.com", "tags": ["mongodb", "database", "NoSQL"], "likes": 100 } >
我們也可以將數(shù)據(jù)定義為一個(gè)變量,如下所示:
document=({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)', by: '搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享', url: 'http://www.souyunku.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
執(zhí)行后顯示結(jié)果如下:
{ "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)", "by" : "搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
執(zhí)行插入操作:
> db.col.insert(document) WriteResult({ "nInserted" : 1 }) >
插入文檔你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法類似于 insert() 方法。如果指定 _id 字段,則會(huì)更新該 _id 的數(shù)據(jù)。
3.2 版本后還有以下幾種語(yǔ)法可用于插入文檔:
db.collection.insertOne():向指定集合中插入一條文檔數(shù)據(jù)。
db.collection.insertMany():向指定集合中插入多條文檔數(shù)據(jù)。
插入單條數(shù)據(jù)
> var document = db.collection.insertOne({"title": "搜云庫(kù)"}) > document { "acknowledged" : true, "insertedId" : ObjectId("5a69f0dfec3046ee8ae54dbe") } > db.collection.find() { "_id" : ObjectId("5a69f0dfec3046ee8ae54dbe"), "title" : "搜云庫(kù)" } >
插入多條數(shù)據(jù)
> var res = db.collection.insertMany([{"title": "搜云庫(kù)"}, {'description': "關(guān)注公眾號(hào),搜云庫(kù),專注于開發(fā)技術(shù)的 研究與知識(shí)分享"}]) > res { "acknowledged" : true, "insertedIds" : [ ObjectId("5a69f188ec3046ee8ae54dbf"), ObjectId("5a69f188ec3046ee8ae54dc0") ] } > db.collection.find() { "_id" : ObjectId("5a69f0dfec3046ee8ae54dbe"), "title" : "搜云庫(kù)" } { "_id" : ObjectId("5a69f188ec3046ee8ae54dc0"), "description" : "關(guān)注公眾號(hào),搜云庫(kù),專注于開發(fā)技術(shù)的研究與 知識(shí)分享" } >
5. MongoDB 刪除文檔
MongoDB remove()函數(shù)是用來移除集合中的數(shù)據(jù)。
MongoDB數(shù)據(jù)更新可以使用update()函數(shù)。在執(zhí)行remove()函數(shù)前先執(zhí)行find()命令來判斷執(zhí)行的條件是否正確,這是一個(gè)比較好的習(xí)慣。
remove() 方法已經(jīng)過時(shí)了,現(xiàn)在官方推薦使用 deleteOne() 和 deleteMany() 方法。
如刪除集合下全部文檔:
> db.col.deleteMany({}) { "acknowledged" : true, "deletedCount" : 2 } > db.col.find() >
刪除 title 等于 “搜云庫(kù)” 的全部文檔:
> db.collection.deleteMany({ title : "搜云庫(kù)"}) { "acknowledged" : true, "deletedCount" : 2 } > > db.collection.find() { "_id" : ObjectId("5a69f188ec3046ee8ae54dc0"), "description" : "關(guān)注公眾號(hào),搜云庫(kù),專注于開發(fā)技術(shù)的研究與 知識(shí)分享" } >
刪除 weixin 等于 “souyunku” 的一個(gè)文檔:
> db.col.insert({weixin:"souyunku"}) WriteResult({ "nInserted" : 1 }) > db.col.find() { "_id" : ObjectId("5a69f5a0ec3046ee8ae54dc1"), "weixin" : "souyunku" } > db.col.deleteOne({weixin:"souyunku"}) { "acknowledged" : true, "deletedCount" : 1 } > db.col.find() >
6. MongoDB 查詢文檔
MongoDB 查詢文檔使用 find() 方法。
find() 方法以非結(jié)構(gòu)化的方式來顯示所有文檔。
語(yǔ)法
MongoDB 查詢數(shù)據(jù)的語(yǔ)法格式如下:
> db.collection.find(query, projection)
·query :可選,使用查詢操作符指定查詢條件
·projection :可選,使用投影操作符指定返回的鍵。查詢時(shí)返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認(rèn)省略)。
pretty() 方法以格式化的方式來顯示所有文檔。
db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)', by: '搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享', url: 'http://www.souyunku.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
> db.col.find().pretty() { "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)", "by" : "搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
MongoDB 與 RDBMS Where 語(yǔ)句比較
6.1 MongoDB AND 條件
MongoDB 的 find() 方法可以傳入多個(gè)鍵(key),每個(gè)鍵(key)以逗號(hào)隔開,即常規(guī) SQL 的 AND 條件。
語(yǔ)法格式如下:
> db.col.find({key1:value1, key2:value2}).pretty()
實(shí)例
以下實(shí)例通過 by 和 title 鍵來查詢數(shù)據(jù):
> db.col.find({"by":"搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享", "title":"MongoDB 教程"}).pretty() { "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)", "by" : "搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
以上實(shí)例中類似于 WHERE 語(yǔ)句:WHERE by=‘搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享’ AND title=‘MongoDB 教程’
6.2 MongoDB OR 條件
MongoDB OR 條件語(yǔ)句使用了關(guān)鍵字 $or,語(yǔ)法格式如下:
>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty
實(shí)例
以下實(shí)例中,我們演示了查詢鍵 by 值為 “搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享” 或鍵 title 值為 MongoDB 教程 的文檔。
> db.col.find({$or:[{"by":"搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)", "by" : "搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >
6.3 AND 和 OR 聯(lián)合使用
以下實(shí)例演示了 AND 和 OR 聯(lián)合使用,類似常規(guī) SQL 語(yǔ)句為: 'where likes>50 AND (by = '搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享' OR title = 'MongoDB 教程')'
> db.col.find({"likes": {$gt:50}, $or: [{"by": "搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫(kù)", "by" : "搜云庫(kù)教程-專注于開發(fā)技術(shù)的研究與知識(shí)分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >
7. MongoDB 條件操作符
條件操作符用于比較兩個(gè)表達(dá)式并從MongoDB集合中獲取數(shù)據(jù)。
MongoDB中條件操作符有:
(>) 大于 - $gt (<) 小于 - $lt (>=) 大于等于 - $gte (<= ) 小于等于 - $lte
清空集合數(shù)據(jù):
db.col.remove({})
插入以下數(shù)據(jù):
> db.col.insert({ title: '測(cè)試數(shù)據(jù)200', description: '關(guān)注公眾號(hào),搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享', by: '搜云庫(kù)', url: 'http://www.souyunku.com', tags: ['test'], likes: 200 })
> db.col.insert({ title: '測(cè)試數(shù)據(jù)150', description: '關(guān)注公眾號(hào),搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享', by: '搜云庫(kù)', url: 'http://www.souyunku.com', tags: ['test'], likes: 150 })
> db.col.insert({ title: '測(cè)試數(shù)據(jù)100', description: '關(guān)注公眾號(hào),搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享', by: '搜云庫(kù)', url: 'http://www.souyunku.com', tags: ['test'], likes: 100 })
使用find()命令查看數(shù)據(jù):
> db.col.find() { "_id" : ObjectId("5a6a083598891b4abe9cc8cc"), "title" : "測(cè)試數(shù)據(jù)200", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 200 } { "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測(cè)試數(shù)據(jù)150", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 } { "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測(cè)試數(shù)據(jù)100", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 } >
7.1 MongoDB (>) 大于操作符 - $gt
db.col.find({"likes" : {$gt : 100}})
類似于SQL語(yǔ)句:
select * from col where likes > 100;
輸出結(jié)果:
{ "_id" : ObjectId("5a6a083598891b4abe9cc8cc"), "title" : "測(cè)試數(shù)據(jù)200", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 200 } { "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測(cè)試數(shù)據(jù)150", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 } >
7.2 MongoDB(>=)大于等于操作符 - $gte
如果你想獲取"col"集合中 “l(fā)ikes” 大于等于 100 的數(shù)據(jù),你可以使用以下命令:
db.col.find({likes : {$gte : 100}})
類似于SQL語(yǔ)句:
select * from col where likes >=100;
輸出結(jié)果:
{ "_id" : ObjectId("5a6a083598891b4abe9cc8cc"), "title" : "測(cè)試數(shù)據(jù)200", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 200 } { "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測(cè)試數(shù)據(jù)150", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 } { "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測(cè)試數(shù)據(jù)100", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 } >
7.3 MongoDB (<) 小于操作符 - $lt
如果你想獲取"col"集合中 “l(fā)ikes” 小于 150 的數(shù)據(jù),你可以使用以下命令:
db.col.find({likes : {$lt : 150}})
類似于SQL語(yǔ)句:
select * from col where likes < 150;
輸出結(jié)果:
> db.col.find({likes : {$lt : 150}}) { "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測(cè)試數(shù)據(jù)100", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 } >
7.4 MongoDB (<=) 小于操作符 - $lte
如果你想獲取"col"集合中 “l(fā)ikes” 小于等于 150 的數(shù)據(jù),你可以使用以下命令:
db.col.find({likes : {$lte : 150}})
類似于SQL語(yǔ)句:
select * from col where likes <= 150;
輸出結(jié)果:
> db.col.find({likes : {$lte : 150}}) { "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測(cè)試數(shù)據(jù)150", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 } { "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測(cè)試數(shù)據(jù)100", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 } >
7.5 MongoDB 使用 (<) 和 (>) 查詢 - $lt 和 $gt
如果你想獲取"col"集合中 “l(fā)ikes” 大于100,小于 200 的數(shù)據(jù),你可以使用以下命令:
db.col.find({likes : {$lt :200, $gt : 100}})
類似于SQL語(yǔ)句:
select * from col where likes>100 AND likes<200;
輸出結(jié)果:
> db.col.find({likes : {$lt :200, $gt : 100}}) { "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測(cè)試數(shù)據(jù)150", "description" : "關(guān)注公眾號(hào), 搜云庫(kù),專注于開發(fā)技術(shù)的研究與知識(shí)分享", "by" : "搜云庫(kù)", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 } >
一些簡(jiǎn)寫說明:
$gt -------- greater than > $gte --------- gt equal >= $lt -------- less than < $lte --------- lt equal <= $ne ----------- not equal != $eq -------- equal =
看完了這篇文章,相信你對(duì)MongoDB是什么,優(yōu)缺點(diǎn)有哪些有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。