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 的时候结果
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)
来源: http://www.bubuko.com/infodetail-2989873.html