MongoDB的2个知识点

2020-12-29 11:14:08 浏览数 (1)

//

MongoDB的2个知识点

//

01

连接数

在MySQL中,我们可以通过show processlist的命令来查看当前的连接数,使用max_connections和max_user_connections参数来查看最大连接数,那么在MongoDB中我们如何查看连接相关的信息呢?

常见的三种方法如下:

代码语言:javascript复制
----------方法一:查看系统最大连接--------------
找到进程号,然后查看max open files 大小:
ps -ef|grep  24208
mon24208   674     1 15 Aug11 ?        18-18:20:56 /usr/local/sinasrv2/mongodb-linux-4.0.4/bin/mongod -f /data1/mongo24208/mongo24208.conf
[root@10.13.16.102 ~]# cat /proc/674/limits | grep "Max open"
Max open files            288000               288000               files

---------方法二:查看当前连接数---------------
coredata10:PRIMARY> db.serverStatus().connections
{ "current" : 187, "available" : 9813, "totalCreated" : 5619230 }

这两个的关系:
current   available = totalCreated  < max open files
9813 187=10000< 288000

---------方法三:查看配置文件的最大连接----------------
直接查看mongodb.conf中的配置文件
net:
    port: 24208
    bindIp: 10.13.16.102,127.0.0.1
    maxIncomingConnections: 10000

默认情况下,最大连接数是max file limits的0.8倍。这是出于一种保护性的考虑,不可能把所有的open file句柄都拿来维护连接数,还需要保持对磁盘上文件的访问。

02

查询的limit、count和skip用法

代码语言:javascript复制
1、使用count()方法查询表中的记录数。两种方法都可以。
> db.yeyz.find()
{ "_id" : ObjectId("5fa172c86e2f58da10d28aa3"), "name" : "yeyz" }
{ "_id" : ObjectId("5fa1743ac69e2dfa962884d7"), "name" : "zhangsan" }
{ "_id" : ObjectId("5fa1776dbb2e0d2bc89a21fb"), "name" : "lisi" }
> db.yeyz.find().count()
3
> db.yeyz.count()
3



2、skip()方法可以用来跳过指定条记录

> db.yeyz.find()
{ "_id" : ObjectId("5fa172c86e2f58da10d28aa3"), "name" : "yeyz" }
{ "_id" : ObjectId("5fa1743ac69e2dfa962884d7"), "name" : "zhangsan" }
{ "_id" : ObjectId("5fa1776dbb2e0d2bc89a21fb"), "name" : "lisi" }

> db.yeyz.find().skip(1).limit(2)
{ "_id" : ObjectId("5fa1743ac69e2dfa962884d7"), "name" : "zhangsan" }
{ "_id" : ObjectId("5fa1776dbb2e0d2bc89a21fb"), "name" : "lisi" }

> db.yeyz.find().skip(2).limit(2)
{ "_id" : ObjectId("5fa1776dbb2e0d2bc89a21fb"), "name" : "lisi" }



3、count()如果直接接在find()后面,没有加参数,则返回的是表中的所有记录
如果count()接在find()或者其他条件后面,要统计结果的条数,则需要补充count(非0值)或者count(true)

> db.yeyz.find().skip(2).limit(2).count()
3
> db.yeyz.find().skip(2).limit(2).count(1)
1
> db.yeyz.find().skip(2).limit(2).count(true)
1

需要注意的是count(),如果前面有其他的函数,最后想要统计函数过滤之后的count结果,需要在count函数中传入一个非0的参数或者传递一个true,否则,得到的结果,是集合里面所有文档的总数。

0 人点赞