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" }
>

业精于勤,荒于嬉;行成于思,毁于随。

如果你觉得这篇文章不错或者对你有所帮助,可以通过右侧【打赏】功能,给予博主一点点鼓励和支持

时间: 2024-12-23 19:09:12

MongoDB基础教程系列--第五篇 MongoDB 映射与限制记录的相关文章

MongoDB基础教程系列--第七篇 MongoDB 聚合管道

在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最大值.最小值.平均值,求和等操作.聚合操作还能够对记录进行复杂的操作,主要用于数理统计和数据挖掘.在 MongoDB 中,聚合操作的输入是集合中的文档,输出可以是一个文档,也可以是多条文档. MongoDB 提供了非常强大的聚合操作,有三种方式: 聚合管道(Aggregation Pipeline)

MongoDB基础教程系列--第三篇 MongoDB基本操作(二)

1.集合操作 1.1.创建集合 MongoDB 用 db.createCollection(name, options) 方法创建集合. 格式 db.createCollection(name, options) 其中,name 是集合名称,是一个字符串:options 是可选项,是一个文档,指定内存大小和索引等选项,具体参数说明如下表: 字段 类型 说明 capped 布尔         (可选)如果为 true,表示为固定集合.固定集合是指具有固定存储空间的集合.当该值为 true 时,必

MongoDB基础教程系列--未完待续

最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作为目录篇,方便阅读,有问题大家一块交流哈.多谢大家关注,转载请注明出处,谢谢! MongoDB基础教程系列--第一篇 进入MongoDB世界 MongoDB基础教程系列--第二篇 MongoDB基本操作(一) MongoDB基础教程系列--第三篇 MongoDB基本操作(二) MongoDB基础教程

MongoDB基础教程系列--第二篇 MongoDB基本操作(一)

1.安装环境 在官网上下载MongoDB的最新版本,根据自身Windows版本下载正确的MongoDB版本.下载后,双击32位或者64位.msi文件,按操作提示安装就可以了. 说明: 32 位版本的 MongoDB 只支持 2G 以下的数据库,只适用于测试及评估. 在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统.最新版本也已经没有了 32 位系统的安装文件. 创建数据目录 安装完MongoDB以后,我们需要创建数据目录.注意,数据目录应该放在根目录下(如: C:\ 或

MongoDB基础教程系列--第九篇 MongoDB 分片

1.分片介绍 分片(sharding)是将数据拆分,将其分散存到不同机器上的过程.MongoDB 支持自动分片,可以使数据库架构对应用程序不可见.对于应用程序来说,好像始终在使用一个单机的 MongoDB 服务器一样,另一方面,MongoDB 自动处理数据在分片上的分布,也更容易添加和删除分片. 请记住:复制是让多台服务器拥有同样的数据副本,每一台服务器都是其他服务器的镜像,而每一个分片都与其他分片拥有不同的数据子集. 通常,分片可以用来: 增加可用的内存 增加可用的磁盘空间 减轻单台服务器的负

Python基础教程系列:五、序列

列表也是序列的一种,所以对于列表的操作同样适用于列表.也可以通过下标或者切片操作来访问某一个或者某个子列表.那么列表和字符串有什么区别呢?首先字符串必须只能由字符组成,即便字符串中有数字,那也是字符类型的数字,不可直接用于数学计算,其次,字符串中的字符具有不可变性.但是列表是可以保留任意数目的Python对象的灵活容器,就像一个大箱子,什么对象都可以往里放.列表具有元素可变性,在序列中,列表是唯一一种支持元素可变性的数据结构.列表在形式上类似于C.Java中的数组,但与数组还是有很大区别的.数组

基础教程系列之装系统篇

[科普]基础教程系列之装系统篇 鉴于每天有很多新人询问安装系统问题,我决定花一些时间来系统性的整理一下安装系统的步骤,带领新人一步步来安装好系统. 目录 0.前言 1.物质准备 2.制作启动盘 3.选择自己需要的系统 4.其他准备工作 5.进入win pe 6.举例进入win pe 7-1.确保正确安装系统的准备工作 7-2.确保正确安装系统的准备工作 8-1.使用原版镜像安装系统 8-2使用ghost安装系统 8-3使用nt6 hdd installer安装系统 9.重启进入操作系统 10.安

互联网神经学系列第五篇:研究大脑中的谷歌,脸书和华为思科路由,脑互联网生理学

本文是互联网神经学系列第五篇-"大脑中的类互联网应用和结构,脑互联网生理学" 一.人类大脑研究的困境 大脑的秘密一直是科学皇冠上最明亮的宝石之一,但在两千年前,人们确连它的重要意义还不知道,例如著名的亚里士多德(Aristotle,公元前384-前322)认为神智在心,是心控制着我们的思想,情绪.大约公元前5世纪,地中海科斯岛上托名希波克拉底(Hippocrates)的一群医生被认为是最早发现了脑是神智的载体,在希波克拉底著作中有如下一段话."人们应当认识到:我们的愉悦.欢乐

前端工程师技能之photoshop巧用系列第五篇——雪碧图

显示目录 目录 [1]定义 [2]应用场景 [3]合并[4]实现[5]维护 前面的话 前面已经介绍过,描述性图片最终要合并为雪碧图.本文是photoshop巧用系列第五篇--雪碧图 定义 css雪碧图(sprite)是一种网页图片应用处理方式,它允许将一个页面涉及到的所有零星图片都包含到一张大图中.使用雪碧图的处理方式可以实现两个优点: [1]减少http请求次数 [2]减少图片大小,提升网页加载速度 (多张图片加载速度小于拼合成的图片的加载速度) 凡事都不完美,实现优点的同时也带来了缺点,即提