MongoDB 数据模型(基本概念)

数据模型

一、设计数据库(Database)

该数据库与MonogDB数据库不是一个东西,MongoDB数据库表示的是MongoDB这个产品,以及它的用处。但是此处的数据库,是MongoDB里面的一个结构对象,我们可以参考MySql数据库的数据库。MongoDB中的数据库,它可以让我们执行添加用户、访问集合等操作。

在MongoDB中创建一个数据库有两种方法:

  1. 在MongoDB shell中使用use database命令,该命令是如果存在该数据库,将焦点切换到该数据库,如果该数据库不存在,则会隐式的创建该数据库,并且将焦点切换到该数据库,然后我们可以操作该数据库中集合与数据等。焦点数据库中我们就可以使用db关键字代表当前数据库,该方法只能在MongoDB shell中使用。
  2. 我们可以使用Connection对象的方法getDB()来创建一个Database对象,比如:con = new Mongo(“localhost”); mdb = con.getDB(“myDB”); mdb.getName();或者mdb = connect(“localhost:27017/myDB”); mdb.getName()。该方法可以在shell中使用,也可以在JavaScript文件中使用。

二、MongoDB的基础概念

连接(Connection)、集合(Collection)、文档(Document)是MongoDB的重要的基础组件,了解这些组件能够帮助大家对MongoDB的存储数据有更清晰的认识,如果大家数据Mysql、orcale等关系型数据库的话。理解这些东西非常简单,只需要把一些观念转变一下即可。

1、连接(Connection)

顾名思义,连接对象能让我们访问MongoDB服务器,它表示到服务器的连接,让我们能够获取首选项。

要创建Connection对象,我们可以在MongoDB shell中使用Mongo(host:port),,或者在JavaScript文件中使用var con = new Mongo(host:port),或者使用connect(url, user, password)方法,该方法等同于Mongo().getDB();

2、文档(Document)

文档MongoDB的核心,其是MongoDB存放数据的最最基本的一个单位,每一个文档存放了MongoDB的一条数据。我们可以对比下关系型数据库中的行,其概念虽然不一致,但是其作用是一致的,都是表示一条数据,只不过关系型数据库中的一条数据是放在一张表中的一行,而MongoDB的一条数据则是一个集合中的一个文档。

MongoDB的存放数据是以BSON格式存储到文档中的,也就是说,每一个文档都是一条BSON数据,例如:{“name”:”test”,”age”:18}.其内部有两个键name、age,其值分别为test、18. 文档中的键值对的是有顺序的,比如{“age”:18,”name”:”test”}和上一条是两条数据,而不是同一条。

文档中每个键对应的值,不仅仅是字符串类型,可以是所有的数据类型:int、json、string、boolean等等,甚至于其值可以是一个嵌入的另一个文档。在MongoDB的文档中,其数据是非常灵活的,两个完全不一样的文档,可以放在同一个集合中,这在关系型数据库中,是不能实现的,除非创建一个所有字段都包含的表。在MongoDB的文档中则不需要。这也是MongoDB的一个非常nice的地方。

对于文档中的键,有几点需要注意:
(1)键不能含有”\0”(空字符)。因为这个字符在文档中表示键的结尾。
(2)”.”和”$”是保留字段,非常不建议使用,只有在特定的情况下才会使用,比如”.”字符,该字符在mongoDB中表示取其子字段,所以如果你在键中使用了该字段,取的就不是该字段了。比如{”data.page”:1},这时候我们如果取”data.page”的值,就不是”data.page”这个键了,而是”page”字段的值了。
(3)_开头的键也是保留的,不建议使用。
(4) 键区分大小写,”Foo”和”foo”是两个不同的键。
(5)一个文档中键不能重复。

3、集合(collection)

集合表示多个文档的集合,相当于关系型数据库的表(table),使用集合对象,可以对集合中的文档进行增删改查操作。

访问集合有两种方式:
(1)在mongoDB shell中直接使用db.collectionName,该方式只适用与shell中。
(2)该方法可以在JavaScript文件和shell中使用,mycollection = db.getCollection(“mycollection”);mycollection.find()。

MongoDB提供了很多方法,用于对集合进行一系列的操作。

在这里插入图片描述
上面的大部分类型都是显而易见的,但是有必要详细解释一下对象 id类型。我们上面说了,对象 id类型是一个 12字节的唯一 id。每个字节 2位 16进制数,因此整个 id类型是一个 24位的字符串。

前面四个字节代表从标准纪元开始的时间戳,以秒为单位。
接下来三个字节表示机器号,MongoDB入门2——MongoDB数据类型一般是机器名的hash值。这可以保证不同机器产生的id不会冲突。

接下来两个字节表示进程id号,保证统一机器不同进程产生的id不冲突.

最后三个是计数器的计数值,对于任意一秒钟,可以产生2^24个数.

​ 我们之前提到过,如果不在插入的时候手动的添加_id键,那么系统会自动添加一个。尽管MongoDB的id类型被设计成轻量级的,但是这样还是会不好。毕竟服务器创建这个还是会有开销的。因此,这个工作一般会放到客户端来做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值