zoukankan      html  css  js  c++  java
  • MongoDB(一)


    一、MongoDB简介

    MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

    MongoDB是一个介于系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

    二、MongoDB特点

    1、其主要场景如下:

    1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

    2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。

    3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。

    2、不适用的场景如下:

    1)要求高度事务性的系统。

    2)传统的商业智能应用。

    3)复杂的跨文档(表)级联查询。


    三、基本概念

    MongoDB中基本的概念是文档、集合、数据库,下表可以帮助更容易的理解MongoDB的概念:

    关系型数据库

    MongoDB

    数据库

    数据库

    集合

    文档

    字段

    Join

    内嵌文档

    主键

    主键,MongoDB自动将_id字段设置为主键

    (一)文档

    文档相当于关系型数据库中的行。它一组键值对,具有动态的模式,所以文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这一点,跟关系型数据库有很大的不同。

    注:

    1. 文档中的键/值对是有序的。

    2. MongoDB区分类型和大小写。

    3. MongoDB的文档不能有重复的键。

    4. 键不能含有 (空字符)

    5. .$有特别的意义,只有在特定环境下才能使用。

    (二)集合

    集合相当于关系型数据库中的表。集合就是一组MongoDB文档。集合存在于数据库中,集合没有固定的结构,这意味着可以对集合插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

    注:

    1. 集合名不能是空字符串""

    2. 集合名不能含有字符(空字符),这个字符表示集合名的结尾。

    3. 集合名不能以"system."开头,这是为系统集合保留的前缀。

    4. 集合名用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$

    (三)数据库

    数据库是集合的实际容器。每一数据库都在文件系统中有自己的一组文件。一个 MongoDB 服务器通常有多个数据库。

    注:

    1. 不能是空字符串("")

    2. 不得含有' '(空格).$/ (空宇符)

    3. 应全部小写。

    4. 最多64字节。

    四、数据类型

    Object ID 文档的id

    String: 字符串,最常用,必须是utf-8

    Boolean:布尔值,true 或者false

    Integer:整数

    Double:浮点数

    Arrays:数组或者列表,多个值存储到一个键

    Object:用于嵌入文档,即一个值为一个文档

    Null:存储null

    Timestamp:时间戳

    Date:存储当前日期或时间unix时间格式



    Object ID

      每个文档都有一个属性,为_id保证文档的唯一性;

      可以自己去设置_id插入文档

      如果自己没设置,mongoDB为每个文档提供一个独特的_id ,是一个12字节十六进制数

          前4个字节为当前时间戳

          接下来的3个字节为机器ID

          接下来2个字节为mongo的服务进程ID

          最后3个是简单的增量值

    五、基本操作

    1、创建数据库:

    use <数据库名>

    如果数据库不存在,则创建数据库,否则切换到指定数据库

    2查看数据库

    show dbs

    3创建集合

    db.createCollection("集合名")

    4删除集合

    1show collections 查看当前数据库所有集合

    2db.集合名.drop()

    5插入文档数据

    db.集合名.insert(文档内容)

    6更新文档

                db.集合名.update(
                    <query>,
                    <update>,
                      {
                         upsert: <boolean>,
                         multi: <boolean>,
                         writeConcern: <document>
                      }
                  )

    参数说明:

    query : update的查询条件,类似sql update查询内where后面的。

    update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

    upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

    multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

    writeConcern :可选,抛出异常的级别。

    7删除文档

                  db.collection.remove(
                       <query>,
                       <justOne>
                    )

    参数说明:

    • query:(可选)删除的文档的条件。

    • justOne: (可选)如果设为 true 1,则只删除一个文档。

    • writeConcern:(可选)抛出异常的级别。

    8、查询文档

    db.collection.find(query, projection)



    参数说明:

    query :可选,使用查询操作符指定查询条件

    projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

    >db.col.find().pretty()






  • 相关阅读:
    webdav srs相关
    How To Configure WebDAV Access with Apache on Ubuntu 14.04
    ubuntu 编译lighttpd
    srs编译及推流测试
    Compile pciutils (lspci, setpci) in Windows x86,在 Windows x86 平台下编译 pciutils (lspci, setpci)
    mingw MSYS2 区别
    Qt之美(三):隐式共享
    Qt之美(二):元对象
    Qt之美(一):d指针/p指针详解
    C++的栈空间和堆空间
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/10915334.html
Copyright © 2011-2022 走看看