接触Mongodb其实也有一年多了,但是没有正经的总结过。。。
现将一些基础的常用的命令稍作整理。
上星期,遇到了意见很奇怪的事,一个在aws上运维的项目,客户突然打电话说,手机端打开信息一览很慢,甚至打不开,在dbServer执行top -c 命令,发现memory已经高达92%。。。cpu也是满负荷在工作。。。,查看了weblog,mongodb的log,在mongodb的日志里发现对一张集合做检索操作时特别慢,大概要花15秒到20秒。。。
之前对这个集合做过删除操作,但是删除也是一两个星期前的事了,为什么就偏偏那天变得缓慢?百思不得其解。。。
因为有两套环境,一套检证用的环境,还有一套就是商用环境,后来试着比较了这两张表索引,发现检证上的索引比商用的索引多了一个。。。于是瞎猫碰上死耗子居然把问题解决了,但是后来想想其实并不是因为多一个索引的问题。这个问题需要后续在仔细研究一下再讨论。今天先将一些基础整理一下。
--关于索引
1.查看数据库文档的索引
db.document_name.getIndexes();
2.删除指定索引
db.document_name.dropIndex({"index_1" : 1,"index_2" :1});
3.创建单索引
db.document_name.ensureIndex({"index": 1});
4.创建复合索引
db.document_name.ensureIndex({"index_1" : 1,"index_2" :1},{"unique":true},{"name":"index_1_1_index_2_2"},{"background":true});
关于background:true,如果在为已有数据的文档创建索引时,可以执行下面的命令,以使MongoDB在后台创建索引,这样的创建时就不会阻塞其他操作。但是相比而言,以阻塞方式创建索引,会使整个创建过程效率更高,但是在创建时MongoDB将无法接收其他的操作。
--关于检索
db.document_name.find({ $query: { column_1: "*******************" }, $orderby: { _id: -1 } })
db.document_name.find({"column_1":"*******************"}).sort({_id:-1})
--删除文档
db.document_name.drop();
--模糊查询
1.db.document_name.remove({name:{$regex:"aaa"}});--删除name的value中包含“aaa”这样的document
2.db.document_name.find({name:{$regex:"aaa",$options:"$i"}}); -忽略大小写,检索name的value中包含“aaa”这样的document
3.db.coll_push_info.find({"push_body.content":{$regex:"aaaa",$options:"$i"}});//嵌套字段的模糊查询
--排序
db.document_name.find({"name":"..........................."}).sort({test_id:1});
注:1为升序,-1为降序
--多值匹配
db.document_name.find({id:{$in:["888888888888","999999999999","7777777777777"]}});
--去重复
db.document_name.distinct("test_id");
mongodb的isodate就是UTC时间,中国时间=UTC+8