1、什麼是MongoDB?php
MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。java
在高負載的狀況下,添加更多的節點,能夠保證服務器性能。mysql
MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。正則表達式
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。sql
一、首先咱們建立一個數據庫存儲目錄 /data/db:mongodb
sudo mkdir -p /data/db
啓動 mongodb,默認數據庫目錄即爲 /data/db:shell
sudo mongod # 若是沒有建立全局路徑 PATH,須要進入如下目錄 cd /usr/local/mongodb/bin sudo ./mongod
再打開一個終端進入執行如下命令:數據庫
$ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version v3.4.2 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.2 Welcome to the MongoDB shell. …… > 1 + 1 2 >
注意:若是你的數據庫目錄不是/data/db,能夠經過 --dbpath 來指定。
無論咱們學習什麼數據庫都應該學習其中的基礎概念,在mongodb中基本的概念是文檔、集合、數據庫,下面咱們挨個介紹。express
下表將幫助您更容易理解Mongo中的一些概念:編程
SQL術語/概念 | MongoDB術語/概念 | 解釋/說明 |
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據記錄行/文檔 |
column | field |
數據字段/域 |
index | index | 索引 |
table joins | 錶鏈接,MongoDB不支持 | |
primary key | primary key | 主鍵,MongoDB自動將_id字段設置爲主鍵 |
經過下圖實例,咱們也能夠更直觀的瞭解Mongo中的一些概念:
一個mongodb中能夠創建多個數據庫。
MongoDB的默認數據庫爲"db",該數據庫存儲在data目錄中。
MongoDB的單個實例能夠容納多個獨立的數據庫,每個都有本身的集合和權限,不一樣的數據庫也放置在不一樣的文件中。
"show dbs" 命令能夠顯示全部數據的列表。
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > show dbs local 0.078GB test 0.078GB >
執行 "db" 命令能夠顯示當前數據庫對象或集合。
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > db test >
運行"use"命令,能夠鏈接到一個指定的數據庫。
> use local switched to db local > db local >
以上實例命令中,"local" 是你要連接的數據庫。
咱們將詳細講解MongoDB中命令的使用。
數據庫也經過名字來標識。數據庫名能夠是知足如下條件的任意UTF-8字符串。
有一些數據庫名是保留的,能夠直接訪問這些有特殊做用的數據庫。
文檔是一組鍵值(key-value)對(即 BSON)。MongoDB 的文檔不須要設置相同的字段,而且相同的字段不須要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 很是突出的特色。
一個簡單的文檔例子以下:
{"site":"www.baidu.com", "name":"百度"}
下表列出了 RDBMS 與 MongoDB 對應的術語:
RDBMS | MongoDB |
---|---|
數據庫 | 數據庫 |
表格 | 集合 |
行 | 文檔 |
列 | 字段 |
表聯合 | 嵌入文檔 |
主鍵 | 主鍵 (MongoDB 提供了 key 爲 _id ) |
數據庫服務和客戶端 | |
Mysqld/Oracle | mongod |
mysql/sqlplus | mongo |
須要注意的是:
文檔鍵命名規範:
集合就是 MongoDB 文檔組,相似於 RDBMS (關係數據庫管理系統:Relational Database Management System)中的表格。
集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合能夠插入不一樣格式和類型的數據,但一般狀況下咱們插入集合的數據都會有必定的關聯性。
好比,咱們能夠將如下不一樣數據結構的文檔插入到集合中:
{"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.jd.com","name":"京東商城","num":5}
當第一個文檔插入時,集合就會被建立。
以下實例:
下表爲MongoDB中經常使用的幾種數據類型。
數據類型 | 描述 |
---|---|
String | 字符串。存儲數據經常使用的數據類型。在 MongoDB 中,UTF-8 編碼的字符串纔是合法的。 |
Integer | 整型數值。用於存儲數值。根據你所採用的服務器,可分爲 32 位或 64 位。 |
Boolean | 布爾值。用於存儲布爾值(真/假)。 |
Double | 雙精度浮點值。用於存儲浮點值。 |
Min/Max keys | 將一個值與 BSON(二進制的 JSON)元素的最低值和最高值相對比。 |
Array | 用於將數組或列表或多個值存儲爲一個鍵。 |
Timestamp | 時間戳。記錄文檔修改或添加的具體時間。 |
Object | 用於內嵌文檔。 |
Null | 用於建立空值。 |
Symbol | 符號。該數據類型基本上等同於字符串類型,但不一樣的是,它通常用於採用特殊符號類型的語言。 |
Date | 日期時間。用 UNIX 時間格式來存儲當前日期或時間。你能夠指定本身的日期時間:建立 Date 對象,傳入年月日信息。 |
Object ID | 對象 ID。用於建立文檔的 ID。 |
Binary Data | 二進制數據。用於存儲二進制數據。 |
Code | 代碼類型。用於在文檔中存儲 JavaScript 代碼。 |
Regular expression | 正則表達式類型。用於存儲正則表達式。 |
下面說明下幾種重要的數據類型。
ObjectId 相似惟一主鍵,能夠很快的去生成和排序,包含 12 bytes,含義是:
MongoDB 中存儲的文檔必須有一個 _id 鍵。這個鍵的值能夠是任何類型的,默認是個 ObjectId 對象
因爲 ObjectId 中保存了建立的時間戳,因此你不須要爲你的文檔保存時間戳字段,你能夠經過 getTimestamp 函數來獲取文檔的建立時間:
> var newObject = ObjectId() > newObject.getTimestamp()
ObjectId 轉爲字符串
> newObject.str
-------------------------------------------------
你只須要在 MongoDB 安裝目錄的 bin 目錄下執行 mongodb 便可。
執行啓動操做後,mongodb 在輸出一些必要信息後不會輸出任何信息,以後就等待鏈接的創建,當鏈接被創建後,就會開始打印日誌信息。
你可使用 MongoDB shell 來鏈接 MongoDB 服務器。你也可使用 PHP 來鏈接 MongoDB。本教程咱們會使用 MongoDB shell 來鏈接 Mongodb 服務,以後的章節咱們將會介紹如何經過php 來鏈接MongoDB服務。
標準 URI 鏈接語法:
-----------------------
MongoDB 建立數據庫的語法格式以下:
use DATABASE_NAME
若是數據庫不存在,則建立數據庫,不然切換到指定數據庫。
如下實例咱們建立了數據庫 library:
> use library switched to db library > db library >
若是你想查看全部數據庫,可使用 show dbs 命令:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
能夠看到,咱們剛建立的數據庫 library 並不在數據庫的列表中, 要顯示它,咱們須要向 library 數據庫插入一些數據。
> db.library.insert({"name":"圖書管理系統"}) WriteResult({ "nInserted" : 1 }) > show dbs admin 0.000GB config 0.000GB library 0.000GB local 0.000GB >
MongoDB 中默認的數據庫爲 test,若是你沒有建立新的數據庫,集合將存放在 test 數據庫中。
注意: 在 MongoDB 中,集合只有在內容插入後纔會建立! 就是說,建立集合(數據表)後要再插入一個文檔(記錄),集合纔會真正建立。
----------------------
MongoDB 刪除數據庫的語法格式以下:
db.dropDatabase()
刪除當前數據庫,默認爲 test,你可使用 db 命令查看當前數據庫名。
如下實例咱們刪除了數據庫 runoob。
首先,查看全部數據庫:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
接下來咱們切換到數據庫 runoob:
> use library
switched to db library
執行刪除命令:
> db.dropDatabase() { "dropped" : "library", "ok" : 1 } >
最後,咱們再經過 show dbs 命令數據庫是否刪除成功:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
集合刪除語法格式以下:
db.collection.drop()
如下實例刪除了 library 數據庫中的集合 publish:
> use library switched to db library > > > db.books.insert({"name":"紅樓夢"}) WriteResult({ "nInserted" : 1 }) > db.publish.insert({"name":"北京出版社"}) WriteResult({ "nInserted" : 1 }) > db.author.insert({"name":"張仁國"}) WriteResult({ "nInserted" : 1 }) > > > > show tables author books publish > > > db.author.drop() true >
-------------------
本章節咱們爲你們介紹如何使用 MongoDB 來建立集合。
MongoDB 中使用 createCollection() 方法來建立集合。
語法格式:
db.createCollection(name, options)
參數說明:
options 能夠是以下參數:
字段 | 類型 | 描述 |
---|---|---|
capped | 布爾 | (可選)若是爲 true,則建立固定集合。固定集合是指有着固定大小的集合,當達到最大值時,它會自動覆蓋最先的文檔。 當該值爲 true 時,必須指定 size 參數。 |
autoIndexId | 布爾 | (可選)如爲 true,自動在 _id 字段建立索引。默認爲 false。 |
size | 數值 | (可選)爲固定集合指定一個最大值(以字節計)。 若是 capped 爲 true,也須要指定該字段。 |
max | 數值 | (可選)指定固定集合中包含文檔的最大數量。 |
在插入文檔時,MongoDB 首先檢查固定集合的 size 字段,而後檢查 max 字段。
在 test 數據庫中建立 library 集合:
> use test switched to db test > db.createCollection("library") { "ok" : 1 } >
若是要查看已有集合,可使用 show collections 命令:
> show collections
library
>
下面是帶有幾個關鍵參數的 createCollection() 的用法:
建立固定集合 mycol,整個集合空間大小 6142800 KB, 文檔最大個數爲 10000 個
> db.createCollection("mycol", { capped : true, autoIndexId : true, size : ... 6142800, max : 10000 } ) { "note" : "the autoIndexId option is deprecated and will be removed in a future release", "ok" : 1 } >
MongoDB 中,你不須要建立集合。當你插入一些文檔時,MongoDB 會自動建立集合。
> db.url.insert({"name":"路由"}) WriteResult({ "nInserted" : 1 }) > show collections library mycol url >
--------------------
本章節咱們爲你們介紹如何使用 MongoDB 來刪除集合。
MongoDB 中使用 drop() 方法來刪除集合。
語法格式:
db.collection.drop()
參數說明:
返回值
若是成功刪除選定集合,則 drop() 方法返回 true,不然返回 false。
在數據庫 test 中,咱們能夠先經過 show collections 命令查看已存在的集合:
> use test switched to db test > show collections library mycol url
接着刪除集合 url:
> db.url.drop()
true
>
>
經過 show collections 再次查看數據庫 mydb 中的集合:
> show collections
library
mycol
>
從結果中能夠看出 mycol2 集合已被刪除。
---------------------
本章節中咱們將向你們介紹如何將數據插入到MongoDB的集合中。
文檔的數據結構和JSON基本同樣。
全部存儲在集合中的數據都是BSON格式。
BSON是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON。
MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語法以下:
db.COLLECTION_NAME.insert(document)
如下文檔能夠存儲在 MongoDB 的 runoob 數據庫 的 col 集合中:
> use runoob switched to db runoob > db.col.insert({title:"Mongo 教程",description:"MongoDB 是一個Nosql 數據庫",url:"baidu.com",tages:['mongodb','database','Nosql']}) WriteResult({ "nInserted" : 1 }) >
以上實例中 col 是咱們的集合名,若是該集合不在該數據庫中, MongoDB 會自動建立該集合並插入文檔。
查看已插入文檔:
> db.col.find() { "_id" : ObjectId("5c873ba1684bc0bda7811a41"), "title" : "Mongo 教程", "description" : "MongoDB 是一個Nosql 數據庫", "url" : "baidu.com", "tages" : [ "mongodb", "database", "Nosql" ] } >
咱們也能夠將數據定義爲一個變量,以下所示:
> document=({title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫', by: '菜鳥教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 });
執行後顯示結果以下:
{ "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.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 版本後還有如下幾種語法可用於插入文檔:
# 插入單條數據 > var document = db.collection.insertOne({"a": 3}) > document { "acknowledged" : true, "insertedId" : ObjectId("571a218011a82a1d94c02333") } # 插入多條數據 > var res = db.collection.insertMany([{"b": 3}, {'c': 4}]) > res { "acknowledged" : true, "insertedIds" : [ ObjectId("571a22a911a82a1d94c02337"), ObjectId("571a22a911a82a1d94c02338") ] }
-----------------------
MongoDB 使用 update() 和 save() 方法來更新集合中的文檔。接下來讓咱們詳細來看下兩個函數的應用及其區別。
update() 方法用於更新已存在的文檔。語法格式以下:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
參數說明:
咱們在集合 col 中插入以下數據:
>db.col.insert({ title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫', by: '菜鳥教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
接着咱們經過 update() 方法來更新標題(title):
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 輸出信息 > db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >
能夠看到標題(title)由原來的 "MongoDB 教程" 更新爲了 "MongoDB"。
以上語句只會修改第一條發現的文檔,若是你要修改多條相同的文檔,則須要設置 multi 參數爲 true。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
save() 方法經過傳入的文檔來替換已有文檔。語法格式以下:
db.collection.save( <document>, { writeConcern: <document> } )
參數說明:
如下實例中咱們替換了 _id 爲 56064f89ade2f21f36b03136 的文檔數據:
>db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "Runoob", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 })
替換成功後,咱們能夠經過 find() 命令來查看替換後的數據
>db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "Runoob", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 } >
只更新第一條記錄:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
所有更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一條:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
所有添加進去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
所有更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一條記錄:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
在3.2版本開始,MongoDB提供如下更新集合文檔的方法:
首先咱們在test集合裏插入測試數據
use test db.test_collection.insert( [ {"name":"abc","age":"25","status":"zxc"}, {"name":"dec","age":"19","status":"qwe"}, {"name":"asd","age":"30","status":"nmn"}, ] )
更新單個文檔
> db.test_collection.updateOne({"name":"abc"},{$set:{"age":"28"}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.test_collection.find() { "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "zxc" } { "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "qwe" } { "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "nmn" } >
更新多個文檔
> db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}}) { "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 } > db.test_collection.find() { "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "xyz" } { "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "xyz" } { "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "xyz" } >
移除集合中的鍵值對,使用的 $unset 操做符:
語法:
{ $unset: { <field1>: "", ... } }
若是指定的字段不存在則操做不作任何處理。
db.col.update({"_id":"56064f89ade2f21f36b03136"}, {$set:{ "test2" : "OK"}}) db.col.find() db.col.update({"_id":"56064f89ade2f21f36b03136"}, {$unset:{ "test2" : "OK"}}) db.col.find()
---------------------
MongoDB 查詢文檔使用 find() 方法。
find() 方法以非結構化的方式來顯示全部文檔。
MongoDB 查詢數據的語法格式以下:
db.collection.find(query, projection)
若是你須要以易讀的方式來讀取數據,可使用 pretty() 方法,語法格式以下:
>db.col.find().pretty()
pretty() 方法以格式化的方式來顯示全部文檔。
如下實例咱們查詢了集合 col 中的數據:
> db.col.find().pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
除了 find() 方法以外,還有一個 findOne() 方法,它只返回一個文檔。
若是你熟悉常規的 SQL 數據,經過下表能夠更好的理解 MongoDB 的條件語句查詢:
操做 | 格式 | 範例 | RDBMS中的相似語句 |
---|---|---|---|
等於 | {<key>:<value> } |
db.col.find({"by":"菜鳥教程"}).pretty() |
where by = '菜鳥教程' |
小於 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小於或等於 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大於 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大於或等於 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等於 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
MongoDB 的 find() 方法能夠傳入多個鍵(key),每一個鍵(key)以逗號隔開,即常規 SQL 的 AND 條件。
語法格式以下:
>db.col.find({key1:value1, key2:value2}).pretty()
如下實例經過 by 和 title 鍵來查詢 菜鳥教程 中 MongoDB 教程 的數據
> db.col.find({"by":"菜鳥教程", "title":"MongoDB 教程"}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
以上實例中相似於 WHERE 語句:WHERE by='菜鳥教程' AND title='MongoDB 教程'
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("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >
如下實例演示了 AND 和 OR 聯合使用,相似常規 SQL 語句爲: 'where likes>50 AND (by = '菜鳥教程' OR title = 'MongoDB 教程')'
>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
補充一下 projection 參數的使用方法
db.collection.find(query, projection)
若不指定 projection,則默認返回全部鍵,指定 projection 格式以下,有兩種模式
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的鍵,不返回其餘鍵
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的鍵,返回其餘鍵
_id 鍵默認返回,須要主動指定 _id:0 纔會隱藏
兩種模式不可混用(由於這樣的話沒法推斷其餘鍵是否應返回)
db.collection.find(query, {title: 1, by: 0}) // 錯誤
只能全1或全0,除了在inclusion模式時能夠指定_id爲0
db.collection.find(query, {_id:0, title: 1, by: 1}) // 正確
若不想指定查詢條件參數 query 能夠 用 {} 代替,可是須要指定 projection 參數:
querydb.collection.find({}, {title: 1})
若是是 qty 大於 50 小於 80 不能這樣寫:
db.posts.find( { qty: { $gt: 50 }, qty: { $lt: 80 } } )
應該這樣:
db.posts.find( { qty: { $gt: 50 ,$lt: 80}} )
---------------
條件操做符用於比較兩個表達式並從mongoDB集合中獲取數據。
在本章節中,咱們將討論如何在MongoDB中使用條件操做符。
MongoDB中條件操做符有:
咱們使用的數據庫名稱爲"runoob" 咱們的集合名稱爲"col",如下爲咱們插入的數據。
爲了方便測試,咱們能夠先使用如下命令清空集合 "col" 的數據:
db.col.remove({})
插入如下數據
>db.col.insert({ title: 'PHP 教程', description: 'PHP 是一種建立動態交互性站點的強有力的服務器端腳本語言。', by: '菜鳥教程', url: 'http://www.runoob.com', tags: ['php'], likes: 200 })
>db.col.insert({title: 'Java 教程', description: 'Java 是由Sun Microsystems公司於1995年5月推出的高級程序設計語言。', by: '菜鳥教程', url: 'http://www.runoob.com', tags: ['java'], likes: 150 })
>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫', by: '菜鳥教程', url: 'http://www.runoob.com', tags: ['mongodb'], likes: 100 })
使用find()命令查看數據:
> db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種建立動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司於1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
若是你想獲取 "col" 集合中 "likes" 大於 100 的數據,你可使用如下命令:
db.col.find({likes : {$gt : 100}})
相似於SQL語句:
Select * from col where likes > 100;
輸出結果:
> db.col.find({likes : {$gt : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種建立動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司於1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } >
若是你想獲取"col"集合中 "likes" 大於等於 100 的數據,你可使用如下命令:
db.col.find({likes : {$gte : 100}})
相似於SQL語句:
Select * from col where likes >=100;
輸出結果:
> db.col.find({likes : {$gte : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種建立動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司於1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } >
若是你想獲取"col"集合中 "likes" 小於 150 的數據,你可使用如下命令:
db.col.find({likes : {$lt : 150}})
相似於SQL語句:
Select * from col where likes < 150;
輸出結果:
> db.col.find({likes : {$lt : 150}}) { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
若是你想獲取"col"集合中 "likes" 小於等於 150 的數據,你可使用如下命令:
db.col.find({likes : {$lte : 150}})
相似於SQL語句:
Select * from col where likes <= 150;
輸出結果:
> db.col.find({likes : {$lte : 150}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司於1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
若是你想獲取"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("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司於1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } >
一些簡寫說明:
$gt -------- greater than > $gte --------- gt equal >= $lt -------- less than < $lte --------- lt equal <= $ne ----------- not equal != $eq -------- equal =
模糊查詢
查詢 title 包含"教"字的文檔:
db.col.find({title:/教/})
查詢 title 字段以"教"字開頭的文檔:
db.col.find({title:/^教/})
查詢 titl e字段以"教"字結尾的文檔:
db.col.find({title:/教$/})