1.1 MongoDB简介

  1、特点

      1. MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。

      2. 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Ning",Address="Beijing")来实现更快的排序。

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

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

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

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

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

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

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

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

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

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

  2、MongoDB简介

      1. MongoDB是一个文档型的NoSQL数据库,文档型---> BSON文档(json的二进制)
      2. 保存数据:key-value
      3. 一般不支持事务

  3、MongoDB使用场景

    1)更高的写入负载

        默认情况下,MongoDB更侧重高数据写入性能,而非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景。

        但是应当避免在高事务安全性的系统中使用MongoDB,除非能从架构设计上保证事务安全。

    2)高可用性

        MongoDB的复副集(Master-Slave)配置非常简洁方便,此外,MongoDB可以快速响应的处理单节点故障,自动、安全的完成故障转移。

        这些特性使得MongoDB能在一个相对不稳定(如云主机)的环境中,保持高可用性。

    3)表结构不明确,且数据在不断变大

  4、MongoDB应用举例

      1. 比如豆瓣影评中有1000部电影,每部电影有1000个影评,每个影评有1000个评论,那么查询笛卡尔积是1000*1000*1000

      2. 而使用MongoDB只需要存储1000条数据即可完成上述数据查询

      

1.2 MongoDB安装与配置

  1、上传解压安装MongoDB

      mkdir tools # 存放安装包
      mkdir training # 存放安装目录

      tar -zxvf mongodb-linux-x86_64-enterprise-rhel70-3.4.10.tgz -C ~/training/

      vi ~/.bash_profile

MONGODB_HOME=/root/training/mongodb-linux-x86_64-enterprise-rhel70-3.4.10
export MONGODB_HOME PATH=$MONGODB_HOME/bin:$PATH
export PATH

.bash_profile

      source ~/.bash_profile                # 生效环境变量, 使在任何位置都可以使用MongoDB命令

      安装MongoDB依赖rpm包

      yum install -y net-snmp*             # 安装net-snmp : 
      yum install -y cyrus*                   # 安装cyrus :

      启动MongoDB

      mkdir -p /data/db

      mongod --dbpath /data/db          # 指定MongoDB数据库文件存储路径(从3.2版本后,MongoDB的默认的数据引擎:wiredTiger)

      mongod --dbpath /data/db1 --storageEngine=mmapv1         # 早期:内存映射,可以指定参数  --storageEngine=mmapv1

      使用MongoDB Web的控制台:需要在启动MongoDB的时候,指定参数: --httpinterface

      mongod --dbpath /data/db1 --storageEngine=mmapv1 --httpinterface

  2、测试MongoDB shell

      mongo                     # 进入mongo shell环境

      show dbs                 # 查看所有db

      use mydemo            # 使用我们的数据库(如果没有这个数据库会自动创建)

      db.test1.insert({id:1,"name":"Tom"})                  # 在test1表中插入一条数据(如果没有这个表会自动创建)

1.3 MongoDB的体系结构

  1、一个MongoDB Server:实例和多个数据库(1:N)

      

  2、逻辑存储结构

      数据库(database)、表(集合Collection)、记录(文档Document)

  3、物理存储结构

    1)--dbpath /data/db 指定数据库文件存储的位置

    2)MongoDB的物理存储的文件
      (*)命名空间文件: 后缀: .ns 大小 16M
      (*)数据文件: 后缀:0,1,2,3****
        大小: 0 ---> 16M
            1 ---> 32M
            2 ---> 64M
      (*)日志文件:存储的位置可能不一样
        (1)直接存储在操作系统
            系统日志文件: 记录的是系统的启动信息、告警信息等等
            journal日志文件:重做日志,即:redo日志,用于恢复
        (2)存储在集合中(Collection)中
            oplog: 复制操作的日志(只在:主从复制的功能)
            慢查询的日志(需要单独配置):一般在生产系统中:大于200毫秒的日志

    注意:从3.2版本后,MongoDB的默认的数据引擎:wiredTiger
    早期:内存映射,可以指定参数 --storageEngine=mmapv1
    新版本:数据文件大小从:64M开始

1.4 使用mongo shell

  1、启动mongo shell
      mongo                 # 直接输入mongo即可进入mongo shell环境

      mongo -u *** -p *** -host *** -port ***

      参数:

        --username 用户名
        --password 密码
        --host
        --port

  2、可以在mongo Shell使用外部的编辑器:vi

      [root@linux-node2 db]#   export EDITOR=vi                        # 定义环境变量 后需要重新进入mongo shell环境中 
      [root@linux-node2 db]#   mongo     

      MongoDB Enterprise >   function myFunction(){}
      MongoDB Enterprise >   edit myFunction     # 修改myFunction函数

      function myFunction(){print("hello word")}
      MongoDB Enterprise >   myFunction()          # 运行myFunction() 函数
      hello word

  3、使用启动配置文件

      vim ~/.mongorc.js


host=db.serverStatus().host;
cmdCount=1;
prompt=function(){
return db+"@"+host+" "+(cmdCount++) +">";
}

''' 此时的mongo shell就会显示 数据库名(test)主机名(linux-node2.example.com)   条数
test@linux-node2.example.com 1>
'''

  4、mongo shell的基本操作

      show dbs                       # 查看所有数据库

      use mydemo1                # 使用数据库(如果没有当前数据库会自动创建)

      show tables                    # 查看当前数据库所有表

      show collections             # 查看当前集合

1.5 MongoDB数据类型

    注:mongo shell数据类型:字符串、整型、布尔值、浮点数、时间 ******

  1、日期类型:date

      使用不同方式来创建一个date
      (*) Date():表示当前时间,插入的是一个字符串类型
      (*) new Date():插入的是isodate类型,表示的是格林威治标准时间
      (*) ISODate(): 类似new Date()

  2、ObjectId:

      当插入数据的时候,自动生成一个字段: _id ---> 相当于主键
      ObjectId是一个12字节的BSON类型的字符串

  3、表示数字的时候,注意的问题
      NumberInt: 表示32位整数
      NumberDecimal:支持34位小数
      Double:如果没有指定数字类型默认是double

  4、测试

db.test2.insertOne({ "_id" : 1, "val" : NumberDecimal( "9.99" ), "description" : "Decimal" })
db.test2.insertOne({ "_id" : 2, "val" : 9.99, "description" : "Double" })
db.test2.insertOne({ "_id" : 3, "val" : 10, "description" : "Double" })
db.test2.insertOne({ "_id" : 4, "val" : NumberLong(10), "description" : "Long" })
db.test2.insertOne({ "_id" : 5, "val" : NumberDecimal( "10.0" ), "description" : "Decimal" })

创建表中测试数据


1、查询表中所有数据
db.test2.find()


2、数字不指定数据类型时默认是double类型,所以只能查到一条
db.test2.find({"val":9.99})
{ "_id" : 2, "val" : 9.99, "description" : "Double" }


3、类型为NumberDecimal,值为9.99的数据
db.test2.find({"val":NumberDecimal("9.99")})
{ "_id" : 1, "val" : NumberDecimal("9.99"), "description" : "Decimal" }


4、对于整数10的匹配,将匹配所有的数据类型是10
db.test2.find({"val":10})
{ "_id" : 3, "val" : 10, "description" : "Double" }
{ "_id" : 4, "val" : NumberLong(10), "description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal("10.0"), "description" : "Decimal" }

5、db.test2.find({"val":NumberDecimal("10")})
{ "_id" : 3, "val" : 10, "description" : "Double" }
{ "_id" : 4, "val" : NumberLong(10), "description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal("10.0"), "description" : "Decimal" }

111111111111111111111

01:MongoDB基础的更多相关文章

  1. MongoDB基础知识 01

    MongoDB基础知识  1. 文档  文档是MongoDB中的数据的基本单元,类似于关系型数据库管理系统的行. 文档是键值对的一个有序集.通常包含一个或者多个键值对. 例如: {”greeting& ...

  2. Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

    MongoDB 简介 1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易 2. 易于扩展:MongoDB的设计采用横向扩展.面向文档的数据模型使它能很容易的再多台服务器之间进行分割.自动处 ...

  3. 分布式文档存储数据库之MongoDB基础入门

    一.MongoDB简介 MongoDB是用c++语言开发的一款易扩展,易伸缩,高性能,开源的,schema free 的基于文档的nosql数据库:所谓nosql是指不仅仅是sql的意思,它拥有部分s ...

  4. mongodb基础用法

    安装部分 mongodb配置方法 mongodb的安装目录 C:\MongoDB\Server\3.2\bin 创建以下目录 c:\mongo\log c:\mongo\db 创建mongodb的配置 ...

  5. mongodb基础系列——数据库查询数据返回前台JSP(一)

    经过一段时间停顿,终于提笔来重新整理mongodb基础系列博客了. 同时也很抱歉,由于各种原因,没有及时整理出,今天做了一个demo,来演示,mongodb数据库查询的数据在JSP显示问题. 做了一个 ...

  6. MongoDB基础知识 02

    MongoDB基础知识 02 6 数据类型 6.1 null : 表示空值或者不存在的字段 {"x":null} 6.2 布尔型 : 布尔类型只有两个值true和false {&q ...

  7. MongoDB基础教程系列--未完待续

    最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...

  8. DataBase MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  9. MongoDB 基础(2019年开篇)

    MongoDB基础知识: 1.什么是MongoDB NoSQL(NoSQL=Not Only SQL),意即"不仅仅是SQL". MongoDB是一个介于关系数据库和非关系数据库之 ...

  10. MongoDB基础学习

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

随机推荐

  1. iText C# 合并PDF文件流,以及A5变A4时内容默认放在最底下的问题的解决方法;ASP.NET 实现Base64文件流下载PDF

    /// <summary> 合併PDF檔(集合) </summary> /// <param name="files">欲合併PDF檔之集合(一 ...

  2. 正则表达式识别js跳转的链接

    用Webclient访问链接后返回了跳转页面,页面代码如下,需要把 http://kd.szty56.com:8086/xms/client/order_online!print.action?use ...

  3. python获取当前,昨天,明天时间

    import datetime nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#现在 pastTimeMinutes = ...

  4. 解决Windows内存问题的两个小工具RamMap和VMMap

    解决Windows内存问题需要对操作系统的深入理解,同时对于如何运用Windows调试器或性能监控器要有工作认知.如果你正试着得到细节,诸如内核堆栈大小或硬盘内存消耗,你会需要调试器命令和内核数据架构 ...

  5. Hello world!(内含自己编写的C语言二叉树同学录)

      修改:刷了一段时间的题,水平渐涨,发现同学录真的要做成市面可行的应用的话,应该按学号建立二叉平衡树,红黑树是一个可行的选择. 在同学的推荐下,来到博客园来找志同道合的人交流代码.3个月后参加蓝桥杯 ...

  6. LeetCode108.将有序数组转换为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  7. vue框架(三)_vue引入jquery、bootstrap

    一.vue安装jquery 1.按照之前博客的内容,新建一个vue工程. 2.在项目文件夹下,使用命令npm install jquery --save-dev 引入jquery. 3.在build/ ...

  8. django admim后台不转义提交的html

    autoescape¶ Controls the current auto-escaping behavior. This tag takes either on or off as an argum ...

  9. golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好

    golang学习笔记11   golang要用jetbrain的golang这个IDE工具开发才好  jetbrain家的全套ide都很好用,一定要dark背景风格才装B   从File-->s ...

  10. 使用github管理Eclipse分布式项目开发

    使用github管理Eclipse分布式项目开发 老关我在前面的博文(github管理iOS分布式项目开发)中介绍了github管理iOS分布式开发,今天老关将向大家介绍使用github管 理Ecli ...