zoukankan      html  css  js  c++  java
  • MongoDB介绍

    什么是MongoDB ?

    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

    在高负载的情况下,添加更多的节点,可以保证服务器性能。

    MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

    {
        name: "jack",                 <------field:valu
        age: 23,                      <------field:valu
        status: "A",                  <------field:valu              
        groups: ["news", "sports"],   <------field:valu
    }

    主要特点:

    • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易

    • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。

    • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。

    • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。

    • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组

    • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。

    • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。

    • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。

    • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。

    • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。

    • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

    • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言

    • 安装简单

          -MongoDB与关系型数据库的区别(MySQL):

    MongoDB和 关系型数据库 最大的区别就是约束性,
    可以说文件型数据库几乎不存在约束性,
    理论上没有主外键约束,没有存储的数据类型约束等等
    
    关系型数据库中有 "表" 的概念,有 "字段" 的概念,有 "数据条目" 的概念
    
    MongoDB中同样有以上的概念,但是名称发生了一些变化,
    严格意义上来说,两者的概念即为相似,
    但又有些出入,不过无所谓,我们就当是以上概念就好啦
    

      - MongoDB中存储的“表”:

    MongoDB和 关系型数据库 最大的区别就是约束性,
    可以说文件型数据库几乎不存在约束性,
    理论上没有主外键约束,没有存储的数据类型约束等等
    
    关系型数据库中有 "表" 的概念,有 "字段" 的概念,有 "数据条目" 的概念
    
    MongoDB中同样有以上的概念,但是名称发生了一些变化,
    严格意义上来说,两者的概念即为相似,
    但又有些出入,不过无所谓,我们就当是以上概念就好啦
    

      win7安装:

      - 官网下载地址:https://www.mongodb.com/

      - 下载msi安装包,下载成功后 一路点点点即可;

      - 默认安装路径为:C:Program FilesMongoDB

      - 将当前工作目录下的 bin文件加入环境变量:

      

     

    - CMD中开启服务器:输入命令:mongod

        - 会报错,报错是因为在C盘根目录下缺少了 datadb 两个文件;

        - 在C盘根目录下创建这两个文件,重启即可;

      - CMD开启client:输入命令:mongo

    MongoDB中存储的数据类型

    - MongoDB中的基本十种数据类型:

    Object  ID :Documents 自生成的 _id
    
    String: 字符串,必须是utf-8
    
    Boolean:布尔值,true 或者false (在Python中 True False 首字母大写)
    
    Integer:整数 (Int32 Int64 一般用Int32)
    
    Double:浮点数 (没有float类型,所有小数都是Double)
    
    Arrays:数组或者列表,多个值存储到一个键 (list哦,相当于Python中的List哦)
    
    Object:相当于Python中的字典,这个数据类型就是字典
    
    Null:空数据类型 , 一个特殊的概念,None Null
    
    Timestamp:时间戳
    
    Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
    

      

    - Object ID:

      - 每条数据都会自动生成 Object ID;

      - 宇宙唯一,利用了时间和空间;

      - 补充:

    示例:
    
    '_id'  : ObjectId(''5c2091c1f46d535e68928279')
    
    #"5c2091c1" 代指的是时间戳,这条数据的产生时间
    #"f46d53" 代指某台机器的机器码,存储这条数据时的机器编号
    #" 5e68" 代指进程ID,多进程存储数据的时候,非常有用的
    #"928279" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
    #以上四种标识符拼凑成世界上唯一的ObjectID
    #只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
    #可以得到以上四种信息
    
    #注意:这个类型是不可以被JSON序列化的
    
    #"5c2091c1" 代指的是时间戳,这条数据的产生时间
    #"f46d53" 代指某台机器的机器码,存储这条数据时的机器编号
    #"5e68" 代指进程ID,多进程存储数据的时候,非常有用的
    #"928279" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
    #以上四种标识符拼凑成世界上唯一的ObjectID
    #只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
    #可以得到以上四种信息
    
    #注意:这个类型是不可以被JSON序列化的
    

      

     - 在Python中如果想序列化 Object ID 先用 str() 转换一下;

    - String:

      - 正常的字符串....... 加引号括起来

    - Boolean:

      - 布尔值 true 或者 false 首字母小写

    - Integer:

      - 整数

    - Double:

      - 双进准浮点数 就是 float

    - Arrays:

      - 数组,等同于python中的list

    - Object:

      - 对象,等同于python中的dict

    - Null:

      - 空值,等同于python中的None

    - Timestamp:

      - 时间戳;

    - Date:

      - 存储当前日期或时间格式

    >db.tb1.find({time:{$gt:new Date(1363746981289)}})
    支持多种格式:
    > db.tb1.insert({mydate:ISODate("2012-11-02 07:58:51")})
    
    > db.tb1.insert({mydate:ISODate("20121102 07:58:51")})
    > db.tb1.insert({mydate:ISODate("20121102")})
    
    也可以直接操作:
    
    >db.tb1.find({"mydate":{$gt:ISODate("2018-12-02T07:58:51Z")}})和db.tb1.find({"mydate":{$gt:new Date("2018-12-02T07:58:51Z")}})相同  

    MongoDB增删改查

    - 常用基本语法:

      - MongoDB 引用了不存在的对象即创建改对象;

    意思就是
        MongoDB中如果你使用了不存在的对象,那么就等于你在创建这个对象哦
    
        如果你创建的是表,但是表中没有实际数据,则这张表不会保存

    - 使用(创建)数据库:

        - 语法: use 数据库名字

        - 注意当 执行过上面的命令后,在MongoDB中 db 就代指当前是数据库

      - 创建表:

        - 语法: db.表名

    - 查:

      - find():条件查找;

        - 无条件的话,默认查找当前表的所有数据;

        - db.表名.fiand({age:19}); 查找符合此条件的所有数据;

      - findOne():查找一条数据;

        - 无条件的话,默认查找当前表的第一条数据;

        - db.表名.findOne({age:19});加入条件的话,若有多条数据,返回最靠前的一条数据;

    - 增:插入数据(insert     insertOne     insertMany)

      -  insert(): 插入一条或者多条数据,需要带有允许插入多条的参数,这个方法目前官方已经不推荐

      - insertOne(): 插入一条数据,官方推荐

      - insertMany(): 插入多条数据,无需参数控制,官方推荐

    - 改:修改数据(update updateOne updateMany)

      - update({"name":"DragonFire"},{$set:{"age":21}}): 根据条件修改该条数据的内容

      - updateOne():  根据条件修改一条数据的内容,如出现多条,只修改最靠前的数据

      - updateMany(): 根据条件修改所有数据的内容,多条修改

    - 删:删除数据(remove):

      - remove({}): 无条件删除数据,这里要注意了,这是删除所有数据,清空Collection

    MongoDB的其他用法

     -MongoDB AND 条件

          MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件
        >db.col.find({key1:value1, key2:value2})

    -MongoDB OR 条件
      >db.col.find({ $or: [ {key1: value1}, {key2:value2} ]})

    -AND 和 OR 联合使用
      db.col.find({"likes": {$gt:50}, $or: [{"by": "Mongodb中文网"},{"title": "MongoDB 教程"}]})

    -MongoDB中条件操作符有:

      (>) 大于 - $gt
      (<) 小于 - $lt
      (>=) 大于等于 - $gte
      (<= ) 小于等于 - $lte
      (=) 等于 -$eq

    -MongoDB (>) 大于操作符 - $gt
      db.col.find({"likes" : {$gt : 100}}) likes大于100的数据

    -MongoDB(>=)大于等于操作符 - $gte
      db.col.find({likes : {$gte : 100}}) likes大于等于100的数据

    -MongoDB (<) 小于操作符 - $lt
      db.col.find({likes : {$lt : 150}}) 小于150的数据

    -MongoDB (<=) 小于操作符 - $lte 小于等于
      db.col.find({likes : {$lte : 150}})

    -MongoDB 使用 (<) 和 (>) 查询 - $lt 和 $gt
      db.col.find({likes : {$lt :200, $gt : 100}}) 大于100小于200的数据

      $eq 等于

    MongoDB中的那些个update修改器:
      $inc 查询到结果加或减(引用增加)
      $set的用法和特性(没有就自动添加一条)了 如果有就改变之前的值,将key赋值为value
      $unset 用来删除Key(field)的 {name:}
      $push 在列表中追加值
      $pull 删除指定的值
      $pop 从后往前删除(正数从后往前,负数从前往后)

    MongoDB Limit与Skip方法
      limit(3) 查询的数据量,当前位置查询三条数据
      skip(2) 从0开始前跳过当前2条数据
      sort(-1) -1是倒序 1是正序(如果没有id,则默认id最大)
        先跳过再排序,优先级是sort,再分页(注意选择排序的字段)
        其次优先级 skip
        最低优先级 limit

    - MongoDB中Array补充用法:

      - $:"$"  在 update 中 加上关键字 就 变成了 修改器

      - {$set :{"test_list.0" : 9}} 这样就是对应 Array 中的下标进行修改了 "test_list.下标"

      - 使用 update的话, 满足条件的数据下标位置就会传递到 $ 字符中,在我们更新操作的时候就相当于 对这个位置 的元素进行操作

      - 简单说$ 就是一个索引;

    pymongodb简单用法

    - 安装pymongodb:

      pip3 install pymongo
    python连接mongodb:
    import pymongo
    
    mongo_client = pymongo.MongoClient(host = '127.0.0.1', port=27017)   # 连接pymongodb
    db = mongo_client["db1"]  # 使用db1数据库
    collection = db["user_info"]  # 使用user_info 表
    res = collection.find({})  # 查询所有
    print(list(res))
    

      

     

  • 相关阅读:
    《高质量C/C++》读书笔记
    刚刚从网易搬过来了 ,以后就在这安家落户喽
    别让男孩为你哭泣
    EXT综合训练
    liferay中使用自己的数据库
    liferay环境搭建
    第七课,Extjs中常用表单介绍与应用二
    配电管理地理信息系统解决方案
    liferay学习第一站
    第九课,Extjs数据处理
  • 原文地址:https://www.cnblogs.com/caodneg7/p/10052991.html
Copyright © 2011-2022 走看看