//
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,否则,得到的结果,是集合里面所有文档的总数。