手把手教你 MongoDB 的安裝與詳細使用(一)
一、什麼是MongoDB ?
MongoDB 是由C++語言編寫的,是一個基於分散式文件存儲的開源資料庫系統。
在高負載的情況下,添加更多的節點,可以保證伺服器性能。
MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。
MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。
二、MongoDB 優缺點
優點
- 文檔結構的存儲方式,能夠更便捷的獲取數據
- 內置GridFS,支持大容量的存儲
- 海量數據下,性能優越
- 動態查詢
- 全索引支持,擴展到內部對象和內嵌數組
- 查詢記錄分析
- 快速,就地更新
- 高效存儲二進位大對象 (比如照片和視頻)
- 複製(複製集)和支持自動故障恢復
- 內置 Auto- Sharding 自動分片支持雲級擴展性,分片簡單
- MapReduce 支持複雜聚合
- 商業支持,培訓和諮詢
缺點
- 不支持事務操作
- MongoDB 佔用空間過大 (不過這個確定對於目前快速下跌的硬碟價格來說,也不算什麼缺點了)
- MongoDB沒有如MySQL那樣成熟的維護工具
- 無法進行關聯表查詢,不適用於關係多的數據
- 複雜聚合操作通過mapreduce創建,速度慢
- 模式自由,自由靈活的文件存儲格式帶來的數據錯
- MongoDB 在你刪除記錄後不會在文件系統回收空間。除非你刪掉資料庫。但是空間沒有被浪費
三、優缺點詳細解釋
1.內置GridFS,支持大容量的存儲:
GridFS是一個出色的分散式文件系統,可以支持海量的數據存儲。 內置了GridFS了MongoDB,能夠滿足對大數據集的快速範圍查詢。
2.內置 Auto- Sharding 自動分片支持雲級擴展性,分片簡單
提供基於Range的Auto Sharding機制:
一個collection可按照記錄的範圍,分成若干個段,切分到不同的Shard上。
Shards可以和複製結合,配合Replica sets能夠實現Sharding+fail-over,不同的Shard之間可以負載均衡。
查詢是對客戶端是透明的。客戶端執行查詢,統計,MapReduce等操作,這些會被MongoDB自動路由到後端的數據節點。這讓我們關注於自己的業務,適當的 時候可以無痛的升級。MongoDB的Sharding設計能力最大可支持約20 petabytes,足以支撐一般應用。
這可以保證MongoDB運行在便宜的PC伺服器集群上。PC集群擴充起來非常方便並且成本很低,避免了「sharding」操作的複雜性和成本。3.海量數據下,性能優越:
在使用場合下,千萬級別的文檔對象,近10G的數據,對有索引的ID的查詢不會比mysql慢,而對非索引欄位的查詢,則是全面勝出。 mysql實際無法勝任大數據量下任意欄位的查詢,而mongodb的查詢性能實在讓我驚訝。寫入性能同樣很令人滿意,同樣寫入百萬級別的數 據,mongodb比我以前試用過的couchdb要快得多,基本10分鐘以下可以解決。補上一句,觀察過程中mongodb都遠算不上是CPU殺手。
4.全索引支持,擴展到內部對象和內嵌數組
索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件並選取那些符合查詢條件的記錄。
這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可以要花費幾十秒甚至幾分鐘,這對網站的性能是非常致命的。
索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對資料庫表中一列或多列的值進行排序的一種結構。
5.MapReduce 支持複雜聚合
MongoDB中聚合(aggregate)主要用於處理數據(諸如統計平均值,求和等),並返回計算後的數據結果。有點類似sql語句中的 count(*)。
與關係型資料庫相比,MongoDB的缺點:
mongodb不支持事務操作:
所以事務要求嚴格的系統(如果銀行系統)肯定不能用它。
mongodb不支持事務操作:
所以事務要求嚴格的系統(如果銀行系統)肯定不能用它。
mongodb佔用空間過大:
關於其原因,在官方的FAQ中,提到有如下幾個方面:
1、空間的預分配:為避免形成過多的硬碟碎片,mongodb每次空間不足時都會申請生成一大塊的硬碟空間,而且申請的量從64M、128M、256M那 樣的指數遞增,直到2G為單個文件的最大體積。隨著數據量的增加,你可以在其數據目錄里看到這些整塊生成容量不斷遞增的文件。
2、欄位名所佔用的空間:為了保持每個記錄內的結構信息用於查詢,mongodb需要把每個欄位的key-value都以BSON的形式存儲,如果 value域相對於key域並不大,比如存放數值型的數據,則數據的overhead是最大的。一種減少空間佔用的方法是把欄位名盡量取短一些,這樣佔用 空間就小了,但這就要求在易讀性與空間佔用上作為權衡了。
3、刪除記錄不釋放空間:這很容易理解,為避免記錄刪除後的數據的大規模挪動,原記錄空間不刪除,只標記「已刪除」即可,以後還可以重複利用。
4、可以定期運行db.repairDatabase()來整理記錄,但這個過程會比較緩慢
MongoDB沒有如MySQL那樣成熟的維護工具,這對於開發和IT運營都是個值得注意的地方。
四、安裝與使用
MongoDB 3.6不支持Ubuntu 12.04
本文使用:Ubuntu 16.04 x64
安裝MongoDB的企業版
1. 導入公鑰
導入包管理系統使用的公鑰。
Ubuntu軟體包管理工具(即dpkg和apt)通過要求分發者使用GPG密鑰簽署軟體包來確保軟體包的一致性和真實性,使用以下命令導入。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
2. 創建列表文件
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. 更新倉庫
echo apt-get update
4. 安裝服務
安裝MongoDB Enterprise軟體包
安裝MongoDB企業版本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. 啟動服務
service mongod start
6. 查看日誌
確認MongoDB
已經成功啟動,查看/var/log/mongodb/mongod.log
日誌
less /var/log/mongodb/mongod.log
驗證 mongod 已成功啟動,通過檢查日誌文件的內容
[initandlisten] waiting for connections on port 27017
<port>
是mongod
監聽的埠。如果您修改了 配置文件中的net.port
設置/etc/mongod.conf
,埠可能會有所不同。
您可能會在mongod
輸出中看到非嚴重警告。只要你看到上面顯示的日誌行,你可以放心地忽略這些警告。
四、MongoDB 使用
1. 連接 MongoDB
mongo在同一台主機上啟動一個shell mongod
。使用--host
命令行選項指定mongod
監聽的本地主機地址和埠:
mongo --host 127.0.0.1:27017MongoDB shell version v3.6.2connecting to: mongodb://127.0.0.1:27017/MongoDB server version: 3.6.2Server 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 engine2018-01-25T12:42:31.473+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem2018-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 never2018-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 never2018-01-25T12:42:31.511+0000 I CONTROL [initandlisten] > 1+12
上面簡單測試了:1+1
退出:Ctrl+c
2. MongoDB 創建資料庫
語法
use DATABASE_NAME
創建一個 souyunku
的資料庫,使用 db
命令查看
> use souyunkuswitched to db souyunku> dbsouyunku>
查看所有資料庫使用show dbs
> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBtest 0.000GB>
可以看到,剛創建的資料庫 souyunku
並不在資料庫的列表中, 要顯示它,我們需要向 souyunku 資料庫插入一些數據。
> db.souyunku.insert({"name":"關注公眾號,搜雲庫,專註於開發技術的研究與知識分享"})WriteResult({ "nInserted" : 1 })> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBsouyunku 0.000GBtest 0.000GB>
MongoDB
中默認的資料庫為 test
,如果你沒有創建新的資料庫,集合將存放在 test
資料庫中。
3. MongoDB 刪除資料庫
MongoDB
刪除資料庫的語法
db.dropDatabase()
實例
以下操作會把souyunku
數據刪除
查看所有資料庫
> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBsouyunku 0.000GBtest 0.000GB
切換到souyunku
資料庫
> use souyunkuswitched to db souyunku
使用db.dropDatabase()
刪除資料庫
> db.dropDatabase(){ "dropped" : "souyunku", "ok" : 1 }
看到已經刪除了
> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBtest 0.000GB>
4. MongoDB 插入文檔
MongoDB
使用 insert()
或 save()
方法向集合中插入文檔,語法如下:
db.COLLECTION_NAME.insert(document)
以下文檔可以存儲在 MongoDB
的 souyunku
資料庫 的 col
集合中:
切換到souyunku
資料庫
> use souyunkuswitched to db souyunkudb.col.insert({title: MongoDB 教程, description: MongoDB 是一個 Nosql 資料庫, by: 搜雲庫教程-專註於開發技術的研究與知識分享, url: http://www.souyunku.com, tags: [mongodb, database, NoSQL], likes: 100})> db.col.find()
以上實例中 col
是我們的集合名,如果該集合不在該資料庫中, MongoDB
會自動創建該集合併插入文檔。 查看已插入文檔:
響應
{ "_id": ObjectId("5a69eb32ec3046ee8ae54dbb"), "title": "MongoDB 教程", "description": "MongoDB 是一個 Nosql 資料庫", "by": "搜雲庫教程-專註於開發技術的研究與知識分享", "url": "http://www.souyunku.com", "tags": ["mongodb", "database", "NoSQL"], "likes": 100}>
我們也可以將數據定義為一個變數,如下所示:
document=({title: MongoDB 教程, description: MongoDB 是一個 Nosql 資料庫, by: 搜雲庫教程-專註於開發技術的研究與知識分享, url: http://www.souyunku.com, tags: [mongodb, database, NoSQL], likes: 100})
執行後顯示結果如下:
{ "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "搜雲庫教程-專註於開發技術的研究與知識分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}
執行插入操作:
> db.col.insert(document)WriteResult({ "nInserted" : 1 })>
插入文檔你也可以使用 db.col.save(document)
命令。如果不指定 _id
欄位 save()
方法類似於 insert()
方法。如果指定 _id
欄位,則會更新該 _id
的數據。
3.2 版本後還有以下幾種語法可用於插入文檔:
db.collection.insertOne()
:向指定集合中插入一條文檔數據。
db.collection.insertMany()
:向指定集合中插入多條文檔數據。
插入單條數據
> var document = db.collection.insertOne({"title": "搜雲庫"})> document{ "acknowledged" : true, "insertedId" : ObjectId("5a69f0dfec3046ee8ae54dbe")}> db.collection.find(){ "_id" : ObjectId("5a69f0dfec3046ee8ae54dbe"), "title" : "搜雲庫" }>
插入多條數據
> var res = db.collection.insertMany([{"title": "搜雲庫"}, {description: "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享"}])> res{ "acknowledged" : true, "insertedIds" : [ ObjectId("5a69f188ec3046ee8ae54dbf"), ObjectId("5a69f188ec3046ee8ae54dc0") ]}> db.collection.find(){ "_id" : ObjectId("5a69f0dfec3046ee8ae54dbe"), "title" : "搜雲庫" }{ "_id" : ObjectId("5a69f188ec3046ee8ae54dc0"), "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享" }>
5. MongoDB 刪除文檔
MongoDB remove()
函數是用來移除集合中的數據。
MongoDB
數據更新可以使用update()
函數。在執行remove()
函數前先執行find()
命令來判斷執行的條件是否正確,這是一個比較好的習慣。
remove()
方法已經過時了,現在官方推薦使用 deleteOne()
和 deleteMany()
方法。
如刪除集合下全部文檔:
> db.col.deleteMany({}){ "acknowledged" : true, "deletedCount" : 2 }> db.col.find()>
刪除 title
等於 "搜雲庫" 的全部文檔:
> db.collection.deleteMany({ title : "搜雲庫"}){ "acknowledged" : true, "deletedCount" : 2 }> > db.collection.find(){ "_id" : ObjectId("5a69f188ec3046ee8ae54dc0"), "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享" }>
刪除 weixin
等於 "souyunku" 的一個文檔:
> 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()
方法以非結構化的方式來顯示所有文檔。
語法
MongoDB 查詢數據的語法格式如下:
> db.collection.find(query, projection)
query
:可選,使用查詢操作符指定查詢條件projection
:可選,使用投影操作符指定返回的鍵。查詢時返迴文檔中所有鍵值, 只需省略該參數即可(默認省略)。
pretty() 方法以格式化的方式來顯示所有文檔。
db.col.insert({title: MongoDB 教程, description: MongoDB 是一個 Nosql 資料庫, by: 搜雲庫教程-專註於開發技術的研究與知識分享, url: http://www.souyunku.com, tags: [mongodb, database, NoSQL], likes: 100})> db.col.find().pretty(){ "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "搜雲庫教程-專註於開發技術的研究與知識分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}
MongoDB 與 RDBMS Where 語句比較
6.1 MongoDB AND 條件
MongoDB 的 find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開,即常規 SQL 的 AND 條件。
語法格式如下:
> db.col.find({key1:value1, key2:value2}).pretty()
實例
以下實例通過 by
和 title
鍵來查詢 數據
> db.col.find({"by":"搜雲庫教程-專註於開發技術的研究與知識分享", "title":"MongoDB 教程"}).pretty(){ "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "搜雲庫教程-專註於開發技術的研究與知識分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}
以上實例中類似於 WHERE 語句:WHERE by=搜雲庫教程-專註於開發技術的研究與知識分享 AND title=MongoDB 教程
6.2 MongoDB OR 條件
MongoDB OR 條件語句使用了關鍵字 $or,語法格式如下:
>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] }).pretty
實例
以下實例中,我們演示了查詢鍵 by 值為 "搜雲庫教程-專註於開發技術的研究與知識分享" 或鍵 title 值為 MongoDB 教程 的文檔。
> db.col.find({$or:[{"by":"搜雲庫教程-專註於開發技術的研究與知識分享"},{"title": "MongoDB 教程"}]}).pretty(){ "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "搜雲庫教程-專註於開發技術的研究與知識分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}>
6.3 AND 和 OR 聯合使用
以下實例演示了 AND
和 OR
聯合使用,類似常規 SQL
語句為: where likes>50 AND (by = 搜雲庫教程-專註於開發技術的研究與知識分享 OR title = MongoDB 教程)
> db.col.find({"likes": {$gt:50}, $or: [{"by": "搜雲庫教程-專註於開發技術的研究與知識分享"},{"title": "MongoDB 教程"}]}).pretty(){ "_id" : ObjectId("5a69f93598891b4abe9cc8cb"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "搜雲庫教程-專註於開發技術的研究與知識分享", "url" : "http://www.souyunku.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}>
7. MongoDB 條件操作符
條件操作符用於比較兩個表達式並從MongoDB
集合中獲取數據。
MongoDB
中條件操作符有:
(>) 大於 - $gt(<) 小於 - $lt(>=) 大於等於 - $gte(<= ) 小於等於 - $lte
清空集合數據
db.col.remove({})
插入以下數據
> db.col.insert({ title: 測試數據200, description: 關注公眾號,搜雲庫,專註於開發技術的研究與知識分享, by: 搜雲庫, url: http://www.souyunku.com, tags: [test], likes: 200})> db.col.insert({ title: 測試數據150, description: 關注公眾號,搜雲庫,專註於開發技術的研究與知識分享, by: 搜雲庫, url: http://www.souyunku.com, tags: [test], likes: 150})> db.col.insert({ title: 測試數據100, description: 關注公眾號,搜雲庫,專註於開發技術的研究與知識分享, by: 搜雲庫, url: http://www.souyunku.com, tags: [test], likes: 100})
使用find()命令查看數據:
> db.col.find(){ "_id" : ObjectId("5a6a083598891b4abe9cc8cc"), "title" : "測試數據200", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 200 }{ "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測試數據150", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 }{ "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測試數據100", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 }>
7.1 MongoDB (>) 大於操作符 - $gt
db.col.find({"likes" : {$gt : 100}})
類似於SQL語句:
select * from col where likes > 100;
輸出結果
{ "_id" : ObjectId("5a6a083598891b4abe9cc8cc"), "title" : "測試數據200", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 200 }{ "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測試數據150", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 }>
7.2 MongoDB(>=)大於等於操作符 - $gte
如果你想獲取"col"集合中 "likes" 大於等於 100 的數據,你可以使用以下命令:
db.col.find({likes : {$gte : 100}})
類似於SQL語句:
select * from col where likes >=100;
輸出結果:
{ "_id" : ObjectId("5a6a083598891b4abe9cc8cc"), "title" : "測試數據200", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 200 }{ "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測試數據150", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 }{ "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測試數據100", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 }>
7.3 MongoDB (<) 小於操作符 - $lt
如果你想獲取"col"集合中 "likes" 小於 150 的數據,你可以使用以下命令:
db.col.find({likes : {$lt : 150}})
類似於SQL語句:
select * from col where likes < 150;
輸出結果:
> db.col.find({likes : {$lt : 150}}){ "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測試數據100", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 }>
7.4 MongoDB (<=) 小於操作符 - $lte
如果你想獲取"col"集合中 "likes" 小於等於 150 的數據,你可以使用以下命令
db.col.find({likes : {$lte : 150}})
類似於SQL語句:
select * from col where likes <= 150;
輸出結果:
> db.col.find({likes : {$lte : 150}}){ "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測試數據150", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 }{ "_id" : ObjectId("5a6a084498891b4abe9cc8ce"), "title" : "測試數據100", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 100 }>
7.5 MongoDB 使用 (<) 和 (>) 查詢 - $lt 和 $gt
如果你想獲取"col"集合中 "likes" 大於100,小於 200 的數據,你可以使用以下命令:
db.col.find({likes : {$lt :200, $gt : 100}})
類似於SQL語句:
select * from col where likes>100 AND likes<200;
輸出結果:
> db.col.find({likes : {$lt :200, $gt : 100}}){ "_id" : ObjectId("5a6a083e98891b4abe9cc8cd"), "title" : "測試數據150", "description" : "關注公眾號,搜雲庫,專註於開發技術的研究與知識分享", "by" : "搜雲庫", "url" : "http://www.souyunku.com", "tags" : [ "test" ], "likes" : 150 }>
一些簡寫說明:
$gt -------- greater than >$gte --------- gt equal >=$lt -------- less than <$lte --------- lt equal <=$ne ----------- not equal !=$eq -------- equal =
參考:
Runoob 教程:http://www.runoob.com/mongodb/mongodb-tutorial.html
Tutorials 教程:Pointhttps://www.tutorialspoint.com/mongodb/mongodb_advantages.htmMongoDB 官網地址:https://www.mongodb.comMongoDB 官方英文文檔:https://docs.mongodb.com/manualMongoDB 各平台下載地址:https://www.mongodb.com/download-center#communityMongoDB 安裝 https://docs.mongodb.com/manual/tutorial/install-mongodb-enterprise-on-ubuntuContact
- 作者:鵬磊
- 出處:http://www.ymq.io/2018/01/26/MongoDB-1
- Email:admin@souyunku.com
- 版權歸作者所有,轉載請註明出處
- Wechat:關注公眾號,搜雲庫,專註於開發技術的研究與知識分享
http://weixin.qq.com/r/0UwmPsnEJJRbrY1d9xnD (二維碼自動識別)
推薦閱讀:
※用 Python 和 MongoDB 構建千萬級用戶的後台靠譜嗎?
※MongoDB 應用場景?
※MongoDB集群均衡
※MongoDB的一些基本操作
※MongoDB資料庫勒索野蠻生長 數量已達27000多個
TAG:MongoDB |