文档数据库(nosql)学习笔记(3)--MongoDB数据存储

        MongoDB数据存储模型逻辑架构中的关键概念有文档、集合、数据库,与关系型数据库MySQL中的行、表、数据库对应:

文档数据库(nosql)学习笔记(3)--MongoDB数据存储_第1张图片

 1.数据库(Database)

        在将文档加人集合之前,MongoDB需要将集合加到数据库中,一个MongoDB主机上通常会有多个数据库,它们之间可能互不相关。一个数据库拥有一 个许可,并且在硬盘上用特定的文件存储。数据库是用名称作为唯一标识的,可以用几乎任何UTF-8字符来命名.数据库名称要求必须是小写字母,名称字符长度不能多于64位,不得包含空格、.'$'V/'V'.10字符。MongoDB有以下4个保留的默认创建的数据库。

        ●admin:从权限的角度来看,是系统管理员级操作的数据库。如果将一-个用户添加到这个数据库,则这个用户将自动继承所有数据库的权限。一些特定的服务器端命令也只能在这个数据库运行,比如列出所有的数据库或者关闭服务器。

        ●local:这个数据库不会被复制,它所存储的任何集合只能在各自的服务器实例上,可以用来存储限于本地单台服务器访问的任意集合。

        ●config:在分布式分片设置时,将用于存储配置相关的信息。

        ●test:默认连接的数据库。

2.集合(collection)

        集合相当于一个没有固定模式的表。一个集合就是多个文档的组合。集合是模式自由的,不受类似关系数据库中关系范式思想的束缚,集合结构是可变的,也就是在同一个集合中可以有多种结构的文档。

        每个集合是用名称来唯标识的, 名称可以是任何UTF8字符,同时也有些限制:system. 是作为系统预留的集合名称前缀,所以不能以system, 作为自定义集合名称前级,比如system.users保存数据库的用户信息;用户创建集合时也不能用"$”这个保留字符。

3.文档(document)

一个文档相当于RDB中的一行每个文档就是一个结构类似于JSON对象的BSON对象

每一个文档都有一个特殊的Key,即"_id",用来作为文档在集合中的唯一标识,文档中各个Key关联着Value。一个文档包含很多城Fied),域对应RDB中的列或字段,有此文献也将field翻译为键或字段。

文档中值的类型除了可以是数值、字符串等基本类型外,也可以是文档类型,从而形成树形嵌套结构的复杂文档。

一个用于存储个人信息的MongoDB简单文档示例如下。

{
 "_id": ObjectId( “xxxxx")
 "name":"zhangsan",
 "gender":"M",
 "address" : "Beijing",
 "score": 93
}

MongoDB文档中默认会增加名称为id的一个标识字段,用作 主键,其值唯一不可变,可以是除了数组之外的任何类型。其他字段命名不可以$字符开头,不可包含点号'.'字符,不可以是null 字符串。

MongoDB一般 采用嵌嵌套和引用链接两种方式表示文档数据之间的关系。

嵌套(Embed):是指文档利用复合类型,包含一个或多个其他类型的值,这些值也可以称为子文档,文档嵌套的数量和深度没有限制,但MongoDB目前版本限制一个文档最大为I6MB。嵌套的好处是显而易见的,嵌套文档维持了数据逻辑上的完整性,可以将一整项数据作为一个整体操作。

引用链接(Link):比起嵌套,引用链接更接近关系型数据库传统意义上的“引用”,它是两个文档之间的一种关系,引用链接通过DBRef对象建立DBRef对象储存了如何根据数据库名称、集合名称及文档对象标识找到目文档的引用信息,类似于关系型数据库中的外键。即如果在一 个文档A中有一个 DBRef对象,而这个DBRef对象存储了关于如何找到文档B的信息,那么文档A就可以通过解释这个DBRef对象,也称作解引用,来获取文档B的数据。通过DBRef可以实现多对多的数据关系存储。

前段时间串讲的时候mongoDB中的DBRef这个东西没有讲太明白,由于时间原因就匆匆带过了。在这里附上一个小实验,补充一下。
As MongoDB is non-relational (no joins), references (”foreign keys”) between documents are generally resolved client-side by additional queries to the server.
A DBRef is a reference from one document (object) to another within a database.

个人理解DBRef就是在两个collection之间定义的一个关联,比如把collectionB的”_id”列的值存在collectionA的一个列中,然后通过collectionA这个列中所存的值在collectionB中找到相应的记录。
 

你可能感兴趣的:(neo4j,mongodb,数据库,nosql)