//
MongoDB的2个知识点
//
01
连接数
在mysql中,我们可以通过show processlist的命令来查看当前的连接数,使用max_connections和max_user_connections参数来查看最大连接数,那么在MongoDB中我们如何查看连接相关的信息呢?
常见的三种方法如下:
----------方法一:查看系统最大连接-------------- 找到进程号,然后查看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用法
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,否则,得到的结果,是集合里面所有文档的总数。