2024-01-11 21:22:30.0|分类: MongoDB|浏览量: 6236
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。 mongorestore还原数据库 mongorestore --drop 文件路径 参数说明: -h:指明数据库宿主机的IP -u:指明数据库的用户名 -p:指明数据库的密码 -d:指明数据库的名字 -c:指明collection的名字 -o:指明到要备份的文件名 -q:指明备份数据的过滤条件 --drop 在恢复前先删除数据库中的对像 mongorestore -d db -c collection 文件路径路径一定要指定到集合,也就是很细的地方 5、查看基本信息 show dbs:显示数据库列表 use 数据库: 进入到一个数据库中 quit():退出mongo 查询所有记录 db.userInfo.find(); 查询一个集合的记录数量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 最后一次调用的总数据) 注:这个和你用top看到的一样, vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序占用大量内存。 qr: 客户端等待从MongoDB实例读数据的队列长度 faults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展 locked % 被锁的时间百分比,尽量控制在50%以下吧 idx miss % 索引不命中所占百分比。如果太高的话就要考虑索引是不是少了 q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。 conn 当前连接数 time 时间戳 注: 一秒内执行的命令数比如批量插入,只认为是一条命令(所以意义应该不大) dirty: 仅仅针对WiredTiger引擎,官网解释是脏数据字节的缓存百分比 flushes: For WiredTiger引擎:指checkpoint的触发次数在一个轮询间隔期间 注:一般都是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)”命令 profiler信息保存在system.profile表中,可以通过执行“db.getProfilingLevel()”命令来获取当前profiler级别来: level总共有三个参数,0是关闭,1是慢查询,2是所有的。如果设置为2表示所有的语句都会记录到log中。慢查询的默认时间是100ms,当然也可以通过参数slowsms进行设置。 mysql慢查询日志是存储在磁盘上,而mongodb profiler记录直接存在系统的db中。记录到system.profile中。db.system.profile.find()查看记录 mongodb驱动版本
|