1、MongoDB索引
1.1、创建索引
代码语言:txt复制db.books.ensureIndex{{number:1}}
创建索引同时指定索引的名字
代码语言:txt复制db.books.ensureIndex({number:1},{name:"book_"})
1.2、索引使用需要注意的地方
1)创建索引的时候注意1是正序创建索引-1是倒序创建索引
2)索引的创建在提高查询性能的同事会影响插入的性能 对于经常查询少插入的文档可以考虑用索引
3)符合索引要注意索引的先后顺序
4)每个键全建立索引不一定就能提高性能呢 索引不是万能的
5)在做排序工作的时候如果是超大数据量也可以考虑加上索引 用来提高排序的性能
1.3、唯一索引
解决文档books不能插入重复的数值
1.4、剔除重复值
代码语言:txt复制#则插入相同的name值会报错
db.books.ensureIndex({name:-1},{unique:true})
如果建议唯一索引之前已经有重复数值如何处理
代码语言:txt复制#剔除重复数值
db.books.ensureIndex({name:1},{name:"book_",unique:true,dropDups:true})
1.5、后台执行创建索引
为了解决创建索引锁表的问题,在不影响查询功能,可以在后台运行
代码语言:txt复制db.books.ensureIndex({name:1},{background:true})
1.6、强制查询已经建立好的索引
代码语言:txt复制#后一个name为索引名,正序倒序依据建立索引的规则,否则会报错
db.books.find({name:"323book"}).hint({name:1})
1.7、在shell查看数据库已经建立的索引
代码语言:txt复制db.system.indexes.find()
db.system.namespaces.find()
1.8、查询索引信息和查询状态信息
代码语言:txt复制db.books.find({name:"123book"}).explain()
1.9、批量和精确删除索引
代码语言:txt复制db.runCommand({dropIndexes : "books" , index:"name_-1"})
db.runCommand({dropIndexes : "books" , index:"*"})
2、二维索引
建立二维索引
代码语言:txt复制#默认会建一个[-108,108]的范围
db.map.ensureIndex({gis:"2d"},{min:-1,max:201})
3、MongoDB数据转存及恢复
3.1、导出数据(中断其他操作)
使用mongoexport命令行
-d指明使用的库
-c指明要导出的表
-o指明要导出的文件名
-csv指定导出的csv格式
-q过滤导出
--type< json|csv|tsv>
把数据好testdb中的persons导出
代码语言:txt复制mongoexport -d testdb -c persons -o D:/persons.json
导出其他主机数据库的文档
代码语言:txt复制mongoexport --host 192.168.0.16 --port 37017
3.2、导入数据(中断其他操作)
代码语言:txt复制mongoimport --db testdb --collections persons --file d:/persons.json
3.3、运行时备份 mongodump.exe
API: http://docs.mongodb.org/manual/reference/mongodump
代码语言:txt复制mongodump --host 127.0.0.1:27017 -d testdb -o d:/testdb
3.4、运行时恢复 mongorestore.exe
API:http://docs.mongodb.org/manual/reference/mongorestore
恢复数据库
代码语言:txt复制db.dropDatabase()
mongorestore --host 127.0.0.1:27017 -d testdb -directoryperdb d:/testdb/testdb
MongoDB是文件数据库这其实就可以用拷贝文件的方式进行备份
3.5、上锁和解锁
代码语言:txt复制db.runCommand({fsync:1,lock:1}) #上锁
db.currentOp() #解锁
3.7、数据修复
当停电等不可逆转灾难来临的时候,由于mongodb的存储结构导致,会产生垃圾数据,在数据恢复以后这垃圾数据依然存在,这是数据库,可以提供一个自我修复的能力.使用起来很简单
代码语言:txt复制
db.repairDatabase()