上一篇提到的 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" } >
業精於勤,荒於嬉;行成於思,毀於隨。
如果你覺得這篇文章不錯或者對你有所幫助,可以通過右側【打賞】功能,給予博主一點點鼓勵和支持