MongoDB基本概念和数据类型

一、MongoDB基本概念

1、数据库

    1)、一个MongoDB中可以建立多个数据库(这点与关系型数据库一致),数据会存储在MongoDB配置中指定的data位置。并且基于MongoDB的shell(MongDB一大特性),会将数据库赋值给全局变量db,所以在使用mongo(windows中mongo.exe、lingux中mongo.sh)链接后:

    show dbs          // 展示所以的数据库

    use db_name   // 使用或链接某一个数据库(与关系型数据库一致)

    db                     // 展示当前数据库的名称

    2)、命名要求(UTF-8字符串):1、不能是空字符串  2、不饿能够包含:空格、. 、 $ 、/ 、\ 、空字符  3、应全部小写  4、最多64个字符

    3)、保留的数据库名:

    admin:

     将一个用户添加到admin数据库中,则该用户拥有数据库的所有权限,或者一些特殊的服务器端命令也只能从admin数据库汇中运行。

    local:

        该数据库永远都不能进行复制,且本服务器上的所有集合信息都存储在该数据库中。

    config:

        用于分片的时候,存储分片和段等信息。

2、文档

    文档是MongoDB的核心概念。Document可以理解为key-value关系的json(其实叫Bson,比json更为强大),当然还可以用JavaScript的方式进行理解。使用Document的时候需要注意以下几点:

    1)、Mongo的Document不仅区分大小写还区分类型:

    {"a": 1} 与{"a": "1"} 是不同的字段            {"a": 3} 与 {"A": 3} 也是不同的字段

    2)、命名要求(UTF_8字符串): 1、键不能含有空字符串,这个字符表示键的结尾 2、. 和 $ 有特殊的意义(保留字)

3、集合

  1)、动态文档

    集合中没有想关系型数据库中那样去定义可以存储上面key或者什么类型的文档,所以好处就是,当项目需求发生变化的时候,比如需要增加一个字段的时候,只需要在后面的项目中(或者Java映射的对象中)增加字段即可,也不需要对历史数据进行处理(但是可能需要在项目中,做是否有该字段的处理)。

    那么,是不是什么不相关的数据都存储到同一个集合中呢,那时候刚使用mongo的时候就会对这个很不理解,所以需要注意以下几点:

    1、把不相关的文档都放在同一个集合中,对于开发还是维护都是非常不方便的。比如代码里需要将不需要文档进行处理,并且需要查询不相关的数据,并且可能是在该集合中有上亿的数据的情况下。

    2、在一个集合中查询某一类型的文档,每次都需要过了掉不需要类型的文档,特别是在全表扫描的情况下,分开查询多个集合的速度要快的多。

    3、把同一种类型的文档放在同一个集合汇中,数据会更加集中。并且存在很多稀疏字段,在es中是会对性能有所影响的,但是在MongoDB中,稀疏字段的影响并不是很清楚。

    4、索引是按照集合进行定义和管理的,在创建索引时,需要使用文档的特殊结构(特别是在创建唯一索引时)。

 2)、命名要求:

    集合名不能包含空字符串

    集合名不能空字符(\0),用于表示集合名的结尾

  集合名不能以 system. 进行开头,为系统集合的前缀名称。system.users集合存储的是数据库的用户信息;system.namespaces 存储的是所有数据库集合的信息。

    用户创建的集合名中不能包含$

二、MongoDB数据类型

1、null         null表示空值或者不存在的字段           {"a" : null}

2、布尔型   与java的boolean一样                           {"a" : true}

3、数值(不区分整数或浮点数)                            {"a" : 1.34}

   但是对于整数类型可以用下面方式表示                {"a" : NumberInt("3")}          表示4字节的整数

                                                                                {"a" : NumberLong("3")}      表示8字节的整数

 4、字符串   UTF-8的字符串                                   {"a" : "string"}

 5、日期                                                                  {"a" : new Date()}

 6、数组                                                                  {"a" : ["b", "c" , "d", "e"]}

 7、内嵌文档                                                           {"a" : {"b" : "c" , "d" : "e"}}

 8、对象id

    对象id是一个12字节的ID,我文档的唯一表示,对象的默认主键 _id 就是一个对象id

                                                                                {"a" : ObjectId()}

 9、二进制数据

   可以用UTF-8字符串保存到文档中,不能使用shell进行保存

 10、代码                                                                {"a" : function() { /*     ...      */ }} 

      后续在创建副本集、分片时会经常使用代码类型。

猜你喜欢

转载自blog.csdn.net/it_lihongmin/article/details/81269797