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. Software Testing Techniques Homework 3

    1. a.This is the chart b. initial numPrimes = 4, t1 would over the loop. c. t = ( n = 1) d. node cov ...

  2. D3 JS study notes

    如何使用d3来解析自定义格式的数据源? var psv = d3.dsvFormat("|"); // This parser can parse pipe-delimited t ...

  3. 沉淀再出发:关于netty的一些理解和使用

    沉淀再出发:关于netty的一些理解和使用 一.前言 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务 ...

  4. December 23rd 2016 Week 52nd Friday

    Life is a horse, and either you ride it or it rides you. 人生像一匹马,你不驾驭它,它便驾驭你. It is the same meaning ...

  5. 布隆过滤器(Bloom Filter)简要介绍

    一种节省空间的概率数据结构 布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判.但是布隆过滤器也不是特别不精确,只要参数设置的 ...

  6. Chapter 4 Left Outer Join in MapReduce

    4.1 Introdution Consider a company such as Amazon, which has over 200 millions of users and possibly ...

  7. java继承-重写-super实例补充

    方法重写: 是指子类根据需要父类继承来的方法进行改写,是多态机制的前奏. 重写注意点: 1.重写方法必须和被重写方法具有相同的方法名,参数列表和返回值. 2.重写方法方法不能使用比被重写方法更严格的访 ...

  8. 程序人生:01如何做到招聘要求中的“要有扎实的Java基础”

    本文摘自左潇龙博客,原文出处:http://www.zuoxiaolong.com/html/article_232.html 来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日 ...

  9. UVa 1515 - Pool construction(最小割)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. C/C++ 格式化读取和读取一行

    文件内容 23 21 4 1 1 0 114 1 1 1 8 112 5 0 0 0 114 1 0 0 0 115 52 4 1 0 1 134 4 0 1 12 131 4 1 1 0 133 5 ...