zoukankan      html  css  js  c++  java
  • 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的时候结果
    • 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)
        
  • 相关阅读:
    强制退出 避免程序在关闭时崩溃
    ShadowMap渲染阴影方法及问题 【转】
    模板缓冲与阴影体 【转】
    Shadow Mapping 的原理与实践 【转】
    Shadow Map阴影贴图技术之探 【转】
    OpenGL超级宝典笔记——深度纹理和阴影 【转】
    基于GPU加速的三维空间分析【转】
    Linux Shell 高级变量及字符串
    cpu使用率低负载高,原因分析
    zabbix web monitoring 监控网页
  • 原文地址:https://www.cnblogs.com/marchpy/p/10544492.html
Copyright © 2011-2022 走看看