mongodb十大常用命令
cookqq ›博客列表 ›MongoDB

mongodb十大常用命令

2024-01-11 21:22:30.0|分类: MongoDB|浏览量: 6454

摘要: mongoexport导出数据,mongodb java获取所有数据库

1、mongoexport 导出数据

./bin/mongoexport -d doeisDB -c calculating_log --csv -f _id,createTime,firstTime,calTime,thread,useTime,note -o calculating_log.csv


-d:指明使用的库

-c:指明要导出的集合 

-o:指明要导出的文件名

-csv:指明要导出为csv格式

-f:指明需要导出_id,createTime,firstTime,calTime,thread,useTime,note的数据

默认导出了JSON格式的数据。如果我们需要导出CSV格式的数据,则需要使用--csv参数

2、mongodb java大于小于

BasicDBObject parameter = new BasicDBObject();
			if(startdate!=null){
				parameter.append("$gte", startdate);
			}
			if(enddate!=null){
				parameter.append("$lte", enddate);
			}

查询时候使用大于小于

db.collection.find({ "field" : { $gt: value } } )   // 大于  : field > value

db.collection.find({ "field" : { $lt: value } } )   // 小于  :  field < value

db.collection.find({ "field" : { $gte: value } } )  // 大于等于 : field >= value

db.collection.find({ "field" : { $lte: value } } )  // 小于等于 : field <= value

如果要同时满足多个条件,记得要这样用:

db.collection.find({ "field" : { gt:value1,lt: value2 } } )    // value1 < field < value

$ne   不等于

db.things.find( { x : { $ne : 3 } } )


3、mongodb java获取所有数据库

MongoClient mongo =  new MongoClient(ip, port);
mongo.getDatabaseNames();


4、mongodump备份数据库

mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径

如果没有用户谁,可以去掉-u和-p。

如果导出本机的数据库,可以去掉-h。
如果是默认端口,可以去掉--port。
如果想导出所有数据库,可以去掉-d。

mongorestore还原数据库 

mongorestore --drop 文件路径

参数说明:

-h:指明数据库宿主机的IP

-u:指明数据库的用户名

-p:指明数据库的密码

-d:指明数据库的名字

-c:指明collection的名字

-o:指明到要备份的文件名

-q:指明备份数据的过滤条件

--drop 在恢复前先删除数据库中的对像


mongorestore -d db -c collection 文件路径路径一定要指定到集合,也就是很细的地方


5、查看基本信息

show dbs:显示数据库列表 

use 数据库: 进入到一个数据库中
show collections:显示当前数据库中的集合(类似关系数据库中的表) 
show users:显示用户

quit():退出mongo

查询所有记录 db.userInfo.find();
相当于:select* from userInfo;

查询一个集合的记录数量db.fastdht.find().count();

删除数据集合 db.集合名字.drop()



6、mongostat查看mongo状态


inserts/s 每秒插入次数


query/s 每秒查询次数


update/s 每秒更新次数


delete/s 每秒删除次数


getmore/s 每秒执行getmore次数


command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令


flushs/s 每秒执行fsync将数据写入硬盘的次数。


mapped/s 所有的被mmap的数据量,单位是MB,


vsize: 虚拟内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
res:  物理内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)

注:这个和你用top看到的一样, vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序占用大量内存。

qr: 客户端等待从MongoDB实例读数据的队列长度
qw:客户端等待从MongoDB实例写入数据的队列长度
ar: 执行读操作的活跃客户端数量
aw: 执行写操作的活客户端数量


faults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展


locked % 被锁的时间百分比,尽量控制在50%以下吧


idx miss % 索引不命中所占百分比。如果太高的话就要考虑索引是不是少了


q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。


conn 当前连接数


time 时间戳

注: 一秒内执行的命令数比如批量插入,只认为是一条命令(所以意义应该不大)

dirty: 仅仅针对WiredTiger引擎,官网解释是脏数据字节的缓存百分比
used:仅仅针对WiredTiger引擎,官网解释是正在使用中的缓存百分比

flushes:

For WiredTiger引擎:指checkpoint的触发次数在一个轮询间隔期间
For MMAPv1 引擎:每秒执行fsync将数据写入硬盘的次数

注:一般都是0,间断性会是1, 通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。flush开销是很大的,如果频繁的flush,可能就要找找原因了

注:如果这两个数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。看看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了


7、查看当前连接数

db.serverStatus().connections


{ "current" : 18, "available" : 801, "totalCreated" : NumberLong(2665) }

当前连接数、可用连接数、截止目前为止总共创建的连接数


可看到当前mongod的最大连接数即为819=18+801


8、查看内存信息

db.serverStatus().mem


9、mongodb like查询

{"name":/.ssss.*/}


db.log.find({method:"lookblog",params:/sss/ , createTime : { $lte: ISODate("2016-08-01T01:01:01.213Z") }}).sort({createTime:-1});


10 mongo java driver日期转换问题

mongo保存日期是一个64-bit整形数。java driver保存Date时会把他自动转换为标准时间GMT。如中国在GMT+8时区,保存2012-01-20 00:00:00到库中,查询后结果竟然是2012-01-19 16:00:00跟想要结果不一致。 可以在com.mongodb.util.JSON找到问题根源:

 if (o instanceof Date) {
            Date d = (Date) o;
            SimpleDateFormat format = 
        new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
            format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));
        serialize(new BasicDBObject("$date", format.format(d)), buf);
            return;
  }

11 group分组

db.openapi_log.group({  

 keyf : function(doc){  

    var date = new Date(doc.createTime);  

    var dateKey = ""+date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();  

    return {'day':dateKey}; //33  

},   

 cond : {method:"lookblog"}, 

 initial : {"count":0},   

 reduce : function Reduce(doc, out) {  

    if(doc.method){  

        out.count +=1;  

    }  

}  

});  

12 mongo $in查询

db.getCollection('form_group_layout').find({'form_layout_id':{$in:['ff8081814d4cc3fb014d513650344a33','ff8081814d4cc3fb014d51368d164a35','ff8081814d4cc3fb014d5136cd4a4a38','ff8081814d4cc3fb014d5136fc6c4a3a']}})


13 profiler

类似于MySQL的slow log, MongoDB可以监控所有慢的以及不慢的查询。Profiler默认是关闭的,你可以选择全部开启,或者有慢查询的时候开启。


开启profier功能有两种:

第一种就是直接在启动参数里面进行设置,就在茄冬mongodb时候添加-profile=级别

第二种就是在客户端执行“db.setProfilingLevel(1)”命令

blob.png

profiler信息保存在system.profile表中,可以通过执行“db.getProfilingLevel()”命令来获取当前profiler级别来:

blob.png

level总共有三个参数,0是关闭,1是慢查询,2是所有的。如果设置为2表示所有的语句都会记录到log中。慢查询的默认时间是100ms,当然也可以通过参数slowsms进行设置。


mysql慢查询日志是存储在磁盘上,而mongodb profiler记录直接存在系统的db中。记录到system.profile中。db.system.profile.find()查看记录



mongodb驱动版本








Java Driver VersionMongoDB 2.6MongoDB 3.0MongoDB 3.2MongoDB 3.4MongoDB 3.6MongoDB 4.0
Version 3.9✓✓✓✓✓✓
Version 3.8✓✓✓✓✓✓
Version 3.7✓✓✓✓✓
Version 3.6✓✓✓✓✓
Version 3.5✓✓✓✓

Version 3.4✓✓✓✓

Version 3.3✓✓✓


Version 3.2✓✓✓


Version 3.1✓✓



Version 3.0✓✓






一键分享文章

分类列表

  • • struts源码分析
  • • flink
  • • struts
  • • redis
  • • kafka
  • • ubuntu
  • • zookeeper
  • • hadoop
  • • activiti
  • • linux
  • • 成长
  • • NIO
  • • 关键词提取
  • • mysql
  • • android studio
  • • zabbix
  • • 云计算
  • • mahout
  • • jmeter
  • • hive
  • • ActiveMQ
  • • lucene
  • • MongoDB
  • • netty
  • • flume
  • • 我遇到的问题
  • • GRUB
  • • nginx
  • • 大家好的文章
  • • android
  • • tomcat
  • • Python
  • • luke
  • • android源码编译
  • • 安全
  • • MPAndroidChart
  • • swing
  • • POI
  • • powerdesigner
  • • jquery
  • • html
  • • java
  • • eclipse
  • • shell
  • • jvm
  • • highcharts
  • • 设计模式
  • • 列式数据库
  • • spring cloud
  • • docker+node.js+zookeeper构建微服务
版权所有 cookqq 感谢访问 支持开源 京ICP备15030920号
CopyRight 2015-2018 cookqq.com All Right Reserved.