mongodb使用小结-1

接触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

猜你喜欢

转载自baiyunliu.iteye.com/blog/2322626
今日推荐