MongoDB的高级使用
MongoDB的高级使用
1. Mongdb的索引备份以及和python交互
- t255为mongodb中的集合
- 1.1 创建索引
- 索引的特点:提高查找的效率
- 不创建索引的情况下的查询:
for(i=0;i<100000;i++){db.t255.insert({name:'test'+i,age:i})}
先插入10w的数据便于查询
db.t255.find({name:'test10000'}).explain('executionStats')
查询第10001条的数据所用的时间为"executionTimeMillis" : 121,
121ms - 现在创建索引
- 方法:
- db.集合.ensureIndex({属性:1}),1表示升序, -1表示降序
- db.集合.createIndex({属性:1})
db.t255.ensureIndex({age:1}),
db.t255.createIndex({age:1})
这两个方法都可以
- 实践:
db.t255.ensureIndex({age:1})
db.t255.find({name:'test10000'}).explain('executionStats')
查询第10001条的数据所用的时间为
""executionTimeMillis" : 41,
41ms 明显的提升了查询的速度 - 方法:
- 1.2 索引的查看
- db.t255.getIndexes()
- 说明:查看索引:默认情况下_id是集合的索引,添加索引后查看是就可以查看到两个缩影
如下:> db.t255.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.t255"
},
{
"v" : 2,
"key" : {
"age" : 1
},
"name" : "age_1",
"ns" : "test.t255"
}
]
- 1.3 mongodb创建唯一索引
- 原因:在默认情况下mongdb的索引字段的值是可以相同的,仅仅能够提高查询速度,为了精确的查找要加唯一索引
- 格式:在创建索引的时候后面加一个,{"unique":true}就可以了
db.t255.createIndex({age:1},{"unique":true})
- 结果:通过加唯一性的索引,我们可以杜绝插入字段值相同的问题
- 1.4 删除索引
- 格式(也可以说语法):db.t1.dropIndex({'索引名称':1})
db.t255.dropIndex({name:1})
- 这是一个可以删除索引的方法,但是对于默认的_id它也没得办法。。。
{
"ok" : 0,
"errmsg" : "cannot drop _id index",
"code" : 72,
"codeName" : "InvalidOptions"
}
这是删除_id的时候结果
- 格式(也可以说语法):db.t1.dropIndex({'索引名称':1})
- 1.5 建立复合索引
- 原因:在进行数据去重的时候,可能用一个字段来保证数据的唯一性,这个时候可以考虑建立复合索引来实现。
- 语法:db.collection_name.ensureIndex({字段1:1,字段2:1})
- 这就是添加一个并列的索引,两个算一个索引但是干两个的活
db.t255.ensureIndex({age:1,name:2})
结果如下:这里只显示重点的内容{
"v" : 2,
"key" : {
"age" : 1,
"name" : 2
},
"name" : "age_1_name_2",
"ns" : "test.t255"
}
- 1.6 索引的小结
- 特点:
- 根据需要选择是否需要建立唯一索引
- 索引字段是升序还是降序在单个索引的情况下不影响查询效率,但是带复合索引的条件下会有影响
- 特点:
2. mongodb的备份和恢复
- 2.1 备份
- 语法:mongodump -h dbhost -d dbname -o dbdirectory
- -h: 服务器地址,也可以指定端口号,如果本地可以不写
- -d: 需要备份的数据库名称,没的说必写
- -o: 备份的数据存放位置,此目录中存放着备份出来的数据
mongodump -d test -o ./
备份到本地本文件夹
- 2.2 恢复
- 语法:mongorestore -h dbhost -d dbname --dir dbdirectory
- -h,-d,--dir都和备份差不多一个意思,不过是恢复的专属的 --dir 可以看成 -o
mongorestore -d test --dir ./test
从本地恢复
3. mongodb和python交互
- 3.1 mongdb和python交互的模块
- pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo
- 3.2 使用pymongo
from pymongo import MongoClient
client = MongoClient(host,port) 如果是本地可以写成: client = MongoClient()
collection = client[db名][集合名]
- 3.3 mongodb在python中的增删改查
- 增
- ret = collection.insert_one({"name":"test1","age":1}) 增加一个
- item_list = [{"name":"test{}".format(i)} for i in range(10)] 增加多个
- 删
- collection.delete_one({"name":"test10010"}) 删除一个满足条件的数据
- collection.delete_many({"name":"test10010"}) 删除所有满足条件的数据
- 改
- collection.update_one({"name":"test10005"},{"$set":{"name":"new_test10005"}}) 更新一个满足条件的数据
- collection.update_many({"name":"test10005"},{"$set":{"name":"new_test10005"}}) 更新所有满足条件的数据
- 查
- t = collection.find_one({"name":"test10005"}) 查询一个满足条件的数据
find返回所有满足条件的结果,如果条件为空,则返回数据库的所有
t = collection.find({"name":"test10005"})
结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,
for i in t:
print(i)
for i in t: #此时t中没有内容
print(i)
- 增
MongoDB的高级使用的更多相关文章
- SpringMVC整合Mongodb开发,高级操作
开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 + ...
- PHP操作Mongodb之高级查询篇
本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...
- mongodb的高级查询
db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false]) 添加用户 db.auth(usrename,passwor ...
- MongoDB的使用学习之(六)MongoDB的高级查询之条件操作符
此文分为两点,主要是在第二点--java 语法,但是按顺序必须先把原生态的语法写出来 (还有一篇文章也是不错的:MongoDB高级查询用法大全(包含MongoDB命令语法和Java语法,其实就是我整理 ...
- mongodb的高级操作(聚合框架)
group by 查询 不要用java驱动带的group by ,要用2.2版本后的aggregate聚合框架来搞,经过试验速度快一倍 参考 官网:http://docs.mongodb.org/ma ...
- mongodb数据库高级操作
1.创建索引 2.索引名称 3.其他索引 4.explain 5.操作索引 6.高级特性 7.固定集合 8.导入导出 9.上锁 10.添加用户 11.主从复制
- python数据库-mongoDB的高级查询操作(55)
一.MongoDB索引 为什么使用索引? 假设有一本书,你想看第六章第六节讲的是什么,你会怎么做,一般人肯定去看目录,找到这一节对应的页数,然后翻到这一页.这就是目录索引,帮助读者快速找到想要的章节. ...
- MongoDB三-高级操作
复制来自:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...
- MongoDB学习--高级查询 [聚合Group]
Group大约需要一下几个参数. key:用来分组文档的字段.和keyf两者必须有一个 keyf:可以接受一个javascript函数.用来动态的确定分组文档的字段.和key两者必须有一个 initi ...
随机推荐
- centos7上安装python3
一.安装环境及版本 CentOS 6.5 Python 3.6.1 二.安装依赖包 1.安装静态库 # yum install -y openssl-static 注:如果不安装该静态库,会导致pyt ...
- Navicat for mysql 导出导入的问题
问题现象 1:使用navicat 导出5.6.20版本数据库,然后导入到5.7.19mysql出现错误:
- POP动画[1]
POP动画[1] pop动画是facebook扩展CoreAnimation的,使用及其方便:) 1:Spring系列的弹簧效果(两个动画kPOPLayerBounds与kPOPLayerCorner ...
- Linux基础和常用命令
经常使用的命令: #查看端口被占用情况 netstat -tunlp|grep #查看java进程 ps -ef|grep java #压缩前端工程 rar a -ep1 ./update/win32 ...
- Asp.Net MVC Identity 2.2.1 使用技巧(二)
之前我们看到了新生成的项目中跟identity有关的有四个文件,这些文件是基础功能,并未开启identity的全部功能.现在我们先启用角色功能. 1.在App_Start文件夹中的IdentityCo ...
- 数据库相关文章转载(2) MySQL自带的性能压力测试工具mysqlslap详解
PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...
- Windows 下的内存泄漏检测方法
在 Windows 下,可使用 Visual C++ 的 C Runtime Library(CRT) 检测内存泄漏. 首先,我们在.c或.cpp 文件首行插入这一段代码: #define _CRTD ...
- [零基础学JAVA]Java SE面向对象部分.面向对象基础(05)
1.继承 2.多态 3.final 4.重载与覆写 5. this/super 6.抽象类 7.接口 java: class Person{ private String name; priva ...
- Oracle的四种连接方式【转载】
我们以Oracle自带的表来做例子 主要两张表:dept.emp 一个是部门,一个是员工表结构如下: emp name null? Type Empno not null number(4) enam ...
- Linux中从oracle官网下载jdk文件不是标准的gzip格式文件问题
首先你要知道,在linux系统中,文件类型跟后缀名无关,后缀名只是为了方便识别,所以你下载的压缩包可能是tar.gz格式的,也有可能是tar.bz2或tar.xz格式,因为可能别人压缩之后不小心改错了 ...