MongoDB基礎教程系列--第五篇 MongoDB 映射與限制記錄


 返回目錄

上一篇提到的 find() 的方法,細心的伙伴會發現查詢的結果都是顯示了集合中全部的字段,實際應用中,顯然是不夠用的。那么有沒有辦法指定特定的字段顯示出文檔呢?答案是肯定的,MongoDB 中用映射實現這種功能。

1、映射

MongoDB 中限制字段的顯示,可以利用 0 或 1 來設置字段列表。1 用於顯示字段,0 用於隱藏字段。

格式

db.COLLECTION_NAME.find({},{KEY:1})

范例

查詢文檔時,只顯示文檔中的 name。首先查詢出 user 集合中的所有文檔,然后利用映射,返回文檔中 name 字段。

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754e"), "name" : "user2", "age" : 20,"sex":"woman" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754f"), "name" : "user3", "age" : 19,"sex":"woman" }

>db.user.find({},{"name":1, "_id":0})
{ "name" : "liruihuan" }
{ "name" : "user1" }
{ "name" : "user2" }
{ "name" : "user3" }
>

如果不加 "_id":0 會返回什么結果呢

> db.user.find({},{"name":1})
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754e"), "name" : "user2" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754f"), "name" : "user3" }
>

我們發現不設置 "_id":1 結果中也會返回 _id 字段,這是因為在執行 find() 方法時,_id 字段是一直顯示的。如果不想顯示該字段,則可以設置 "_id":0。

2、限制記錄

MongoDB 中想要顯示或者跳過指定的文檔條數,可以利用 limit() 方法和 skip() 方法

2.1、limit() 方法

limit() 方法接受一個數值類型的參數,其值為想要顯示的文檔數。

格式

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

范例

查詢文檔時,只顯示兩條文檔。首先查詢出 user 集合中的所有文檔,然后利用 limit() 方法,顯示兩條記錄。

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754e"), "name" : "user2", "age" : 20,"sex":"woman" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754f"), "name" : "user3", "age" : 19,"sex":"woman" }

>db.user.find().limit(2)
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
>

如果不給 limit() 指定參數呢,我們會發現,返回了全部文檔。

> db.user.find().limit()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754e"), "name" : "user2", "age" : 20,"sex":"woman" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754f"), "name" : "user3", "age" : 19,"sex":"woman" }

2.2、skip() 方法

skip() 方法接受一個數值類型的參數,其值為想要跳過的文檔數。

格式

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

范例

查詢文檔時,只顯示第二條文檔。首先查詢出 user 集合中的所有文檔,然后利用 limit(1) 方法,顯示一條文檔,利用 skip(1) 方法跳過第一條文檔。

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754e"), "name" : "user2", "age" : 20,"sex":"woman" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754f"), "name" : "user3", "age" : 19,"sex":"woman" }

>db.user.find().limit(1).skip(1)
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
>

skip() 方法的默認值是 0 。

> db.user.find()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754e"), "name" : "user2", "age" : 20,"sex":"woman" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754f"), "name" : "user3", "age" : 19,"sex":"woman" }

> db.user.find().skip()
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754b"), "name" : "liruihuan", "age" : 18,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754d"), "name" : "user1", "age" : 19,"sex":"man" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754e"), "name" : "user2", "age" : 20,"sex":"woman" }
{ "_id" : ObjectId("58e1d2f0bb1bbc3245fa754f"), "name" : "user3", "age" : 19,"sex":"woman" }
>

 

業精於勤,荒於嬉;行成於思,毀於隨。

如果你覺得這篇文章不錯或者對你有所幫助,可以通過右側【打賞】功能,給予博主一點點鼓勵和支持


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM