MongoDB安装和常用命令二

1,269 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情


1.写在前面

在上一篇文章中,我们已经分享了mongodb的安装过程,如何启动,如何连接?

还讲到了mongodb的一些常用的命令,详情可以查看这里:MongoDB安装和常用命令一

那么我们继续深入学习,深入学习一些高级的命令。

image.png

2.常用命令

2.1 limit与skip方法

2.1.1 limit() 方法

如果想读取指定数量的数据记录,可以使用MongoDB的Limit方法。

limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

2.1.1.1 语法

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

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

上面的collection_name,需要根据实际的集合名称,进行替换

2.1.1.1 实例

集合 lls 中的数据如下:

{ "_id" : ObjectId("07666542ade2f21f36b01234"), "title" : "PHP 教程", "description" : "PHP
是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "llsydn", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("07666549ade2f21f36b04321"), "title" : "Java 教程", "description" :
"Java 是由Sun Microsystems公司于 1995 年 5 月推出的高级程序设计语言。", "by" : "llsydn", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("0766654fade2f21f36b05678"), "title" : "MongoDB 教程", "description" :
"MongoDB 是一个 Nosql 数据库", "by" : "llsydn", "tags" : ["mongodb" ], "likes" : 100 }

显示查询文档中的两条记录:

> db.lls.find({},{"title":1,_id:0}).limit(2)
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }

注:没有指定limit(),则显示集合中的所有数据。

哈哈,这个和mysql的limit是不是很相似?

2.1.2 skip() 方法

这里,除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据。

skip方法同样接受一个数字参数作为跳过的记录条数。

2.1.2.1 语法

skip() 方法脚本语法格式如下:

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

上面的collection_name,需要根据实际的集合名称,进行替换

2.1.2.2 实例

显示第二条文档数据

>db.lls.find({},{"title":1,_id:0}).limit(1).skip(1)
{ "title" : "Java 教程" }

注:skip()方法默认参数为 0 。

上面是limit条件,那接下来,我们来看看排序:

2.2 文档排序

在 MongoDB 中使用 sort() 方法对数据(文档)进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

sort()方法基本语法如下所示:

>db.collection_name.find().sort({KEY:1})

上面的collection_name,需要根据实际的集合名称,进行替换

lls 集合中的数据如下:

{ "_id" : ObjectId("07666542ade2f21f36b01234"), "title" : "PHP 教程", "description" : "PHP 是
一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "llsydn",  "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("07666549ade2f21f36b04321"), "title" : "Java 教程", "description" : "Java
是由Sun Microsystems公司于 1995 年 5 月推出的高级程序设计语言。", "by" : "llsydn", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("0766654fade2f21f36b05678"), "title" : "MongoDB 教程", "description" :
"MongoDB 是一个 Nosql 数据库", "by" : "llsydn","tags" : [ "mongodb" ], "likes" : 100 }

按字段 likes 的降序排列:

>db.lls.find({},{"title":1,_id:0}).sort({"likes":-1})
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }
{ "title" : "MongoDB 教程" }
>

由此可见,命令都比较简单!!!

我们都知道,随着数据量的变得,查询会越来越慢,有时候,索引会有很大的作用!

这不,我们就来学习下mongodb的索引吧!!!^_^

2.3 MongoDB索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

2.3.1 创建索引

MongoDB使用 createIndex() 方法来创建索引。

2.3.1.1 语法

createIndex()方法基本语法格式如下所示:

>db.collection.createIndex(keys, options)

语法中 Key 值为你要创建的索引字段, 1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

2.3.1.1 实例 1

>db.lls.createIndex({"title":1})

createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。

>db.lls.createIndex({"title":1,"description":-1})
>

2.3.1.3 实例 2

有时候当我们的mongodb数据库在生产环境中,正在使用中。直接创建索引,可能会影响到用户的正常操作。

那这里我们可以在后台创建索引:

db.lls.createIndex({open: 1, close: 1}, {background: true})

加上 background:true 的选项,让创建工作在后台执行

2.3.2 查看集合索引

db.lls.getIndexes()

2.3.3 查看集合索引大小

db.lls.totalIndexSize()

2.3.4 删除集合所有索引

db.lls.dropIndexes()

2.3.5 删除集合指定索引

db.lls.dropIndex("索引名称")

2.4聚合查询

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。利用Aggregate聚合管道可以完成。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

基本语法为:

>db.collection_name.aggregate(AGGREGATE_OPERATION)

上面的collection_name,需要根据实际的集合名称,进行替换

为了便于理解,先将常见的mongo的聚合操作和mysql的查询做下类比:

mongo表达式mysql操作描述
$groupgroup by分组
$sumcount()、sum()计算总和。
$avgavg()计算平均值
$minmin()获取集合中所有文档对应值得最小值。
$maxmax()获取集合中所有文档对应值得最大值。
$matchwhere、having查询条件
$sortorder by排序
$limitlimit取条数
$projectselect选择
$lookupjoin连接

可以看到mongodb和关系数据库,是很类似的。


好了,以上就是MongoDB安装和常用命令二的分享了。

更详细的命令,可参考mongodb菜鸟教程!!!

好了,个人实操可能也不够全面,班门弄斧了。

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png