一、MongoDB - 連接


1.啟動 MongoDB 服務


????只需要在 MongoDB 安裝目錄的 bin 目錄下執行 mongod 即可

????執行啟動操作后,mongodb 在輸出一些必要信息后不會輸出任何信息,之后就等待連接的建立,當連接被建立后,就會開始打印日志信息。


可以使用 MongoDB shell 來連接 MongoDB 服務器,可以使用 PHP 來連接 MongoDB。


標準 URI 連接語法:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • mongodb:// 這是固定的格式,必須要指定。

  • username:password@ 可選項,如果設置,在連接數據庫服務器之后,驅動都會嘗試登陸這個數據庫

  • host1 必須的指定至少一個host, host1 是這個URI唯一要填寫的。它指定了要連接服務器的地址。如果要連接復制集,請指定多個主機地址。

  • portX 可選的指定端口,如果不填,默認為27017

  • /database 如果指定username:password@,連接并驗證登陸指定數據庫。若不指定,默認打開 test 數據庫。

  • ?options 是連接選項。如果不使用/database,則前面需要加上/。所有連接選項都是鍵值對name=value,鍵值對之間通過&或;(分號)隔開


2.實例


使用默認端口來連接 MongoDB 的服務。

mongodb://localhost

通過 shell 連接 MongoDB 服務:

$?./mongoMongoDB?shell?version:?3.0.6connecting?to:?test...

這時候你返回查看運行 ./mongod 命令的窗口,可以看到是從哪里連接到MongoDB的服務器

MongoDB 連接命令格式

使用用戶名和密碼連接到 MongoDB 服務器,你必須使用 'username:password@hostname/dbname' 格式,'username'為用戶名,'password' 為密碼。

使用用戶名和密碼連接登陸到默認數據庫:

$?./mongoMongoDB?shell?version:?3.0.6connecting?to:?test

使用用戶 admin 使用密碼 123456 連接到本地的 MongoDB 服務上。輸出結果如下所示:

>?mongodb://admin:123456@localhost/...

使用用戶名和密碼連接登陸到指定數據庫,格式如下:

mongodb://admin:123456@localhost/test


二、MongoDB 數據庫


MongoDB 創建數據庫

語法

MongoDB 創建數據庫的語法格式如下:

use?DATABASE_NAME

如果數據庫不存在,則創建數據庫,否則切換到指定數據庫。

實例

以下實例我們創建了數據庫cara

> use cara
switched to db cara
> db
cara
>

如果你想查看所有數據庫,可以使用 show dbs 命令:

> show dbs
admin?? 0.000GB
config? 0.000GB
local?? 0.000GB
>

可以看到,我們剛創建的數據庫 cara 并不在數據庫的列表中, 要顯示它,我們需要向 cara 數據庫插入一些數據。

> db.cara.insert({"name":"歡子"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin?? 0.000GB
cara??? 0.000GB
config? 0.000GB
local?? 0.000GB
>

MongoDB 中默認的數據庫為 test,如果你沒有創建新的數據庫,集合將存放在 test 數據庫中。


MongoDB 刪除數據庫

語法

MongoDB 刪除數據庫的語法格式如下:

db.dropDatabase()

刪除當前數據庫,默認為 test,你可以使用 db 命令查看當前數據庫名。

實例

以下實例我們刪除了數據庫 cara。

首先,查看所有數據庫:

> show dbs
admin?? 0.000GB
cara??? 0.000GB
config? 0.000GB
local?? 0.000GB
>?


接下來我們切換到數據庫cara

> use cara
switched to db cara
執行刪除命令:

> db.dropDatabase()
{ "dropped" : "cara", "ok" : 1 }

最后,我們再通過 show dbs 命令數據庫是否刪除成功:

> show dbs
admin?? 0.000GB
config? 0.000GB
local?? 0.000GB
>

刪除集合

集合刪除語法格式如下:

db.collection.drop()

以下實例刪除了 cara 數據庫中的集合 cara:

> use cara
switched to db cara
> show tables
> db.cara.insert({"name":"歡子"})
WriteResult({ "nInserted" : 1 })
> show tables
cara
> db.cara.drop()
true
> show tables
>


三、MongoDB 集合


MongoDB 創建集合


MongoDB 中使用 createCollection() 方法來創建集合。

語法格式:

db.createCollection(name,?options)

參數說明:

  • name: 要創建的集合名稱

  • options: 可選參數, 指定有關內存大小及索引的選項

options 可以是如下參數:


在插入文檔時,MongoDB 首先檢查固定集合的 size 字段,然后檢查 max 字段。


實例

在 test 數據庫中創建 cara 集合:

> use test
switched to db test
> db.createCollection("cara")
{ "ok" : 1 }
>


如果要查看已有集合,可以使用 show collections 命令:

> show collections
cara
>

下面是帶有幾個關鍵參數的 createCollection() 的用法:

創建固定集合 ?mycol,整個集合空間大小 6142800 KB, 文檔最大個數為 10000 個。

>?db.createCollection("mycol",?{?capped?:?true,?autoIndexId?:?true,?size?:?6142800,?max?:?10000?}?){?"ok"?:?1?}>

在 MongoDB 中,你不需要創建集合。當你插入一些文檔時,MongoDB 會自動創建集合。

>?db.mycol2.insert({"name"?:?"菜鳥教程"})>?show?collections
mycol2...


MongoDB 刪除集合


MongoDB 中使用 drop() 方法來刪除集合。

語法格式:

db.collection.drop()

參數說明:

返回值

如果成功刪除選定集合,則 drop() 方法返回 true,否則返回 false。

實例

在數據庫 test 中,我們可以先通過 show collections 命令查看已存在的集合:

> db
test
> show collections
cara
>

接著刪除集合 cara :

> db.cara.drop()
true
> show collections
>
從結果中可以看出 cara 集合已被刪除


四、MongoDB? 文檔


MongoDB ?插入文檔

插入文檔

MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語法如下:

db.COLLECTION_NAME.insert(document)

實例

以下文檔可以存儲在 MongoDB 的 cara 數據庫 的 col 集合中:

> db.col.insert({title:'study',
... description:'mongodb study',
... by:'cara',
... url:'http://cara.com',
... tags:['mongodb','database','NoSQL'],
... likes:101
... })
WriteResult({ "nInserted" : 1 })
>

以上實例中 col 是我們的集合名,如果該集合不在該數據庫中, MongoDB 會自動創建該集合并插入文檔。

查看已插入文檔:

> db.col.find()
{ "_id" : ObjectId("5b553cd97dc80c93e5d47b35"), "title" : "study", "description" : "mongodb study", "by" : "cara", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 101 }
>

我們也可以將數據定義為一個變量,如下所示:

> document=({title:'study',
... description:'mongodb study',
... by:'cara',
... url:'http://cara.com',
... tags:['mongodb','database','NoSQL'],
... likes:101
... })
{
?? ?"title" : "study",
?? ?"description" : "mongodb study",
?? ?"by" : "cara",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}
>

執行插入操作:

> db.col.insert(document)
WriteResult({ "nInserted" : 1 })

再次查看

> db.col.find()
{ "_id" : ObjectId("5b553cd97dc80c93e5d47b35"), "title" : "study", "description" : "mongodb study", "by" : "cara", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 101 }
{ "_id" : ObjectId("5b553e1a7dc80c93e5d47b36"), "title" : "study", "description" : "mongodb study", "by" : "cara", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 101 }
>

MongoDB 更新文檔

MongoDB 使用 update() 和 save() 方法來更新集合中的文檔。

update() 方法

update() 方法用于更新已存在的文檔。語法格式如下:

db.collection.update(<query>,<update>,{upsert:?<boolean>,multi:?<boolean>,writeConcern:?<document>})

參數說明:

  • query : update的查詢條件,類似sql update查詢內where后面的。

  • update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的

  • upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。

  • multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。

  • writeConcern :可選,拋出異常的級別。

之前在col集合中寫入了一些數據

現在我們通過 update() 方法來更新標題(title):

> db.col.update({'title':'study'},{$set:{'title':'mystudy'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find().pretty()
{
?? ?"_id" : ObjectId("5b553cd97dc80c93e5d47b35"),
?? ?"title" : "mystudy",
?? ?"description" : "mongodb study",
?? ?"by" : "cara",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}
{
?? ?"_id" : ObjectId("5b553e1a7dc80c93e5d47b36"),
?? ?"title" : "study",
?? ?"description" : "mongodb study",
?? ?"by" : "cara",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}
>

可以看到標題(title)由原來的 "study" 更新為了 "mystudy"。


以上語句只會修改第一條發現的文檔,如果你要修改多條相同的文檔,則需要設置 multi 參數為 true。

>db.col.update({'title':'MongoDB?教程'},{$set:{'title':'MongoDB'}},{multi:true})

> db.col.update({'by':'cara'},{$set:{'by':'huanzi'}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

> db.col.find().pretty()
{
?? ?"_id" : ObjectId("5b553cd97dc80c93e5d47b35"),
?? ?"title" : "mystudy",
?? ?"description" : "mongodb study",
?? ?"by" : "huanzi",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}
{
?? ?"_id" : ObjectId("5b553e1a7dc80c93e5d47b36"),
?? ?"title" : "study",
?? ?"description" : "mongodb study",
?? ?"by" : "huanzi",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}

save() 方法

save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:

db.collection.save(<document>,{writeConcern:?<document>})

參數說明:

  • document : 文檔數據。

  • writeConcern :可選,拋出異常的級別。

更多實例

只更新第一條記錄:

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 );


MongoDB 刪除文檔

MongoDB remove()函數是用來移除集合中的數據。

MongoDB數據更新可以使用update()函數。在執行remove()函數前先執行find()命令來判斷執行的條件是否正確,這是一個比較好的習慣。

語法

remove() 方法的基本語法格式如下所示:

db.collection.remove(<query>,<justOne>)

如果你的 MongoDB 是 2.6 版本以后的,語法格式如下:

db.collection.remove(<query>,{justOne:?<boolean>,writeConcern:?<document>})

參數說明:

  • query :(可選)刪除的文檔的條件。

  • justOne : (可選)如果設為 true 或 1,則只刪除一個文檔。

  • writeConcern :(可選)拋出異常的級別。

實例

之前我們執行兩次插入操作:


使用 find() 函數查詢數據:

> db.col.find()
{ "_id" : ObjectId("5b553cd97dc80c93e5d47b35"), "title" : "mystudy", "description" : "mongodb study", "by" : "huanzi", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 101 }
{ "_id" : ObjectId("5b553e1a7dc80c93e5d47b36"), "title" : "study", "description" : "mongodb study", "by" : "huanzi", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 101 }
>

接下來我們移除 by 為 'huanzi' 的文檔:


> db.col.remove({'by':'huanzi'})

WriteResult({?"nRemoved"?:?2?})#?刪除了兩條數

> db.col.find()

>?#?沒有數據

如果你只想刪除第一條找到的記錄可以設置 justOne 為 1,如下所示:

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

如果你想刪除所有數據,可以使用以下方式(類似常規 SQL ?的 truncate 命令):

>db.col.remove({})
>db.col.find()
>

remove() 方法已經過時了,現在官方推薦使用 deleteOne() 和 deleteMany() 方法。

如刪除集合下全部文檔:

db.inventory.deleteMany({})

刪除 status 等于 A 的全部文檔:

db.inventory.deleteMany({?status?:?"A"?})

刪除 status 等于 D 的一個文檔:

db.inventory.deleteOne(?{?status:?"D"?}?)


MongoDB 查詢文檔

MongoDB 查詢文檔使用 find() 方法。

find() 方法以非結構化的方式來顯示所有文檔。

語法

MongoDB 查詢數據的語法格式如下:

db.collection.find(query,?projection)
  • query :可選,使用查詢操作符指定查詢條件

  • projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。

如果你需要以易讀的方式來讀取數據,可以使用 pretty() 方法,語法格式如下:

>db.col.find().pretty()

pretty() 方法以格式化的方式來顯示所有文檔。


以下實例我們查詢了集合 col 中的數據:


> db.col.insert({title:'study', description:'mongodb study', by:'cara', url:'http://cara.com', tags:['mongodb','database','NoSQL'], likes:101 })
WriteResult({ "nInserted" : 1 })
> db.col.find().pretty()
{
?? ?"_id" : ObjectId("5b55464c7dc80c93e5d47b37"),
?? ?"title" : "study",
?? ?"description" : "mongodb study",
?? ?"by" : "cara",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}
>
除了 find() 方法之外,還有一個 findOne() 方法,它只返回一個文檔。

MongoDB AND 條件

MongoDB 的 find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開,即常規 SQL ?的 AND 條件。

語法格式如下:

>db.col.find({key1:value1,?key2:value2}).pretty()

實例

以下實例通過 bytitle 鍵來查詢

> db.col.find({'by':'cara','title':'study'}).pretty()
{
?? ?"_id" : ObjectId("5b55470c7dc80c93e5d47b39"),
?? ?"title" : "study",
?? ?"description" : "mongodb study",
?? ?"by" : "cara",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}
>

以上實例中類似于 WHERE 語句:WHERE by='cara' AND title='study'

MongoDB OR 條件

MongoDB OR 條件語句使用了關鍵字 $or,語法格式如下:

>db.col.find({$or:?[?????????{key1:?value1},?{key2:value2}]}).pretty()

實例

以下實例中,我們演示了查詢鍵 by 值為 cara 或鍵 title 值為 study 的文檔。

> db.col.find({$or:[{'by':'cara'},{'title':'study'}]}).pretty()
{
?? ?"_id" : ObjectId("5b55470c7dc80c93e5d47b39"),
?? ?"title" : "study",
?? ?"description" : "mongodb study",
?? ?"by" : "cara",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}

AND 和 OR 聯合使用

以下實例演示了 AND 和 OR 聯合使用,類似常規 SQL 語句為:'where likes>50 AND (by = 'cara' OR title = 'study')'


> db.col.find({"likes":{$gt:50},$or:[{"by":"cara"},{"title":"study"}]}).pretty()
{
?? ?"_id" : ObjectId("5b55470c7dc80c93e5d47b39"),
?? ?"title" : "study",
?? ?"description" : "mongodb study",
?? ?"by" : "cara",
?? ?"url" : "http://cara.com",
?? ?"tags" : [
?? ??? ?"mongodb",
?? ??? ?"database",
?? ??? ?"NoSQL"
?? ?],
?? ?"likes" : 101
}
>


五、MongoDB 條件操作符

描述

條件操作符用于比較兩個表達式并從mongoDB集合中獲取數據。

MongoDB中條件操作符有:

  • (>) 大于 - $gt

  • (<) 小于 - $lt

  • (>=) 大于等于 - $gte

  • (<= ) 小于等于 - $lte

我們使用的數據庫名稱為"cara" 我們的集合名稱為"col",以下為我們插入的數據。

為了方便測試,我們可以先使用以下命令清空集合 "col" 的數據:

db.col.remove({})


插入以下數據

> db.col.insert({title:'study1', description:'mongodb study', by:'cara1', url:'http://cara.com', tags:['mongodb','database','NoSQL'], likes:200 })
WriteResult({ "nInserted" : 1 })
> db.col.insert({title:'study2', description:'mongodb study', by:'cara2', url:'http://cara.com', tags:['mongodb','database','NoSQL'], likes:150 })
WriteResult({ "nInserted" : 1 })
> db.col.insert({title:'study3', description:'mongodb study', by:'cara3', url:'http://cara.com', tags:['mongodb','database','NoSQL'], likes:100 })
WriteResult({ "nInserted" : 1 })
使用find()命令查看數據:

> db.col.find()
{ "_id" : ObjectId("5b554b9e7dc80c93e5d47b3a"), "title" : "study1", "description" : "mongodb study", "by" : "cara1", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 200 }
{ "_id" : ObjectId("5b554bc37dc80c93e5d47b3b"), "title" : "study2", "description" : "mongodb study", "by" : "cara2", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 150 }
{ "_id" : ObjectId("5b554bd47dc80c93e5d47b3c"), "title" : "study3", "description" : "mongodb study", "by" : "cara3", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
>

MongoDB (>) 大于操作符 - $gt

如果你想獲取 "col" 集合中 "likes" 大于 100 的數據,你可以使用以下命令:

db.col.find({"likes"?:?{$gt?:?100}})

類似于SQL語句:

Select?*?from?col?where?likes?>?100;

輸出結果:

> db.col.find({"likes":{$gt : 100}})
{ "_id" : ObjectId("5b554b9e7dc80c93e5d47b3a"), "title" : "study1", "description" : "mongodb study", "by" : "cara1", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 200 }
{ "_id" : ObjectId("5b554bc37dc80c93e5d47b3b"), "title" : "study2", "description" : "mongodb study", "by" : "cara2", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 150 }
>

MongoDB(>=)大于等于操作符 - $gte

如果你想獲取"col"集合中 "likes" ?大于等于 100 的數據,你可以使用以下命令:

db.col.find({likes?:?{$gte?:?100}})

類似于SQL語句:

Select?*?from?col?where?likes?>=100;

輸出結果:

> db.col.find({likes : {$gte : 100}})
{ "_id" : ObjectId("5b554b9e7dc80c93e5d47b3a"), "title" : "study1", "description" : "mongodb study", "by" : "cara1", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 200 }
{ "_id" : ObjectId("5b554bc37dc80c93e5d47b3b"), "title" : "study2", "description" : "mongodb study", "by" : "cara2", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 150 }
{ "_id" : ObjectId("5b554bd47dc80c93e5d47b3c"), "title" : "study3", "description" : "mongodb study", "by" : "cara3", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
>

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("5b554bd47dc80c93e5d47b3c"), "title" : "study3", "description" : "mongodb study", "by" : "cara3", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
>

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("5b554bc37dc80c93e5d47b3b"), "title" : "study2", "description" : "mongodb study", "by" : "cara2", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 150 }
{ "_id" : ObjectId("5b554bd47dc80c93e5d47b3c"), "title" : "study3", "description" : "mongodb study", "by" : "cara3", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
>

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("5b554bc37dc80c93e5d47b3b"), "title" : "study2", "description" : "mongodb study", "by" : "cara2", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 150 }
>

一些簡寫說明:

$gt?--------?greater?than??>
$gte?---------?gt?equal??>=
$lt?--------?less?than??<
$lte?---------?lt?equal??<=
$ne?-----------?not?equal??!=
$eq??--------??equal??=

MongoDB $type 操作符

$type操作符是基于BSON類型來檢索集合中匹配的數據類型,并返回結果。

MongoDB 中可以使用的類型如下表所示:

類型數字備注
Double1
String2
Object3
Array4
Binary data5
Undefined6已廢棄。
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255Query with -1.
Max key127


MongoDB 操作符 - $type 實例

如果想獲取 "col" 集合中 title 為 String 的數據,你可以使用以下命令:

db.col.find({"title"?:?{$type?:?2}})

> db.col.find({"title" : {$type : 2}})
{ "_id" : ObjectId("5b554b9e7dc80c93e5d47b3a"), "title" : "study1", "description" : "mongodb study", "by" : "cara1", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 200 }
{ "_id" : ObjectId("5b554bc37dc80c93e5d47b3b"), "title" : "study2", "description" : "mongodb study", "by" : "cara2", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 150 }
{ "_id" : ObjectId("5b554bd47dc80c93e5d47b3c"), "title" : "study3", "description" : "mongodb study", "by" : "cara3", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
>

六、MongoDB Limit與Skip方法

MongoDB Limit() 方法

如果你需要在MongoDB中讀取指定數量的數據記錄,可以使用MongoDB的Limit方法,limit()方法接受一個數字參數,該參數指定從MongoDB中讀取的記錄條數。

語法

limit()方法基本語法如下所示:

>db.COLLECTION_NAME.find().limit(NUMBER)

實例

集合 col 中的數據如下:

{ "_id" : ObjectId("5b554b9e7dc80c93e5d47b3a"), "title" : "study1", "description" : "mongodb study", "by" : "cara1", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 200 }
{ "_id" : ObjectId("5b554bc37dc80c93e5d47b3b"), "title" : "study2", "description" : "mongodb study", "by" : "cara2", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 150 }
{ "_id" : ObjectId("5b554bd47dc80c93e5d47b3c"), "title" : "study3", "description" : "mongodb study", "by" : "cara3", "url" : "http://cara.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

顯示查詢文檔中的兩條記錄:

> db.col.find({},{"title":1,_id:0}).limit(2)
{ "title" : "study1" }
{ "title" : "study2" }
>
注:如果沒有指定limit()方法中的參數則顯示集合中的所有數據。

MongoDB Skip() 方法

我們除了可以使用limit()方法來讀取指定數量的數據外,還可以使用skip()方法來跳過指定數量的數據,skip方法同樣接受一個數字參數作為跳過的記錄條數。

語法

skip() 方法腳本語法格式如下:

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

實例

以下實例只會顯示第二條文檔數據

> db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
{ "title" : "study2" }
>
注:skip()方法默認參數為 0 。