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)

MongoDB的高级使用的更多相关文章

  1. SpringMVC整合Mongodb开发,高级操作

    开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 +  ...

  2. PHP操作Mongodb之高级查询篇

    本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...

  3. mongodb的高级查询

    db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false])  添加用户 db.auth(usrename,passwor ...

  4. MongoDB的使用学习之(六)MongoDB的高级查询之条件操作符

    此文分为两点,主要是在第二点--java 语法,但是按顺序必须先把原生态的语法写出来 (还有一篇文章也是不错的:MongoDB高级查询用法大全(包含MongoDB命令语法和Java语法,其实就是我整理 ...

  5. mongodb的高级操作(聚合框架)

    group by 查询 不要用java驱动带的group by ,要用2.2版本后的aggregate聚合框架来搞,经过试验速度快一倍 参考 官网:http://docs.mongodb.org/ma ...

  6. mongodb数据库高级操作

    1.创建索引 2.索引名称 3.其他索引 4.explain 5.操作索引 6.高级特性 7.固定集合 8.导入导出 9.上锁 10.添加用户 11.主从复制

  7. python数据库-mongoDB的高级查询操作(55)

    一.MongoDB索引 为什么使用索引? 假设有一本书,你想看第六章第六节讲的是什么,你会怎么做,一般人肯定去看目录,找到这一节对应的页数,然后翻到这一页.这就是目录索引,帮助读者快速找到想要的章节. ...

  8. MongoDB三-高级操作

    复制来自:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...

  9. MongoDB学习--高级查询 [聚合Group]

    Group大约需要一下几个参数. key:用来分组文档的字段.和keyf两者必须有一个 keyf:可以接受一个javascript函数.用来动态的确定分组文档的字段.和key两者必须有一个 initi ...

随机推荐

  1. Ubuntu 安装 PhpMyAdmin 图文教程

    Ubuntu 安装 PhpMyAdmin 管理 MySQL 数据库 PhpMyAdmin 是一个用 PHP 编写的软件工具,可以通过 web方式控制和操作 MySQL 数据库.通过 phpMyAdmi ...

  2. PowerDNS Authoritative Server 3.3 发布

    PowerDNS Authoritative Server 3.3 发布,该版本改进了不同验证器的交互操作,修复了不少 bug. PowerDNS Authoritative Server (PDNS ...

  3. 排查在 Azure 中新建 Windows VM 时遇到的部署问题

    尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...

  4. 用Easing函数实现碰撞效果

    用Easing函数实现碰撞效果 工程中需要的源码请从这里下载: https://github.com/YouXianMing/EasingAnimation 源码: // // ViewControl ...

  5. Andriod(3)——Understanding Android Resources

    Now, we will follow that introduction with an in-depth look at Android SDK fundamentals and cover re ...

  6. August 16th 2017 Week 33rd Wednesday

    A man can be destroyed but not defeated. 一个人可以被毁灭,但不能被打败. Before he was destroyed, he would have bee ...

  7. ubuntu 14.04 安装boost 1.53

    安装依赖 $ sudo apt-get install mpi-default-dev $ sudo apt-get install libicu-dev $ sudo apt-get install ...

  8. PHP_GET后门,躲避任何安全软件

    经常拿到一些比较好的php站想要留住.插入菜刀一句话,很容易被管理发现,不管是eval还是assert,就是管理发现不了,有时连接也会被各种的安全软件拦截.现在教大家一个简单的技巧.本人一直在用,留的 ...

  9. 8、Node.js Buffer(缓冲区)

    内容:Buffer与字符编码,Buffer创建.写入.读取.转换成JSON对象.合并.比较.拷贝.裁剪.长度 Buffer 与字符编码Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 . ...

  10. olivehc--百度开源的cdn cache

    github 地址:http://git.baidu.com/olivehc/olivehc 主要是为了方便管理,百度cdn承载了全百度40%的流量,但是cdn团队只有几个人(一次培训中提到只有4个) ...