Go教程

MongoDB 基本概念

本文主要是介绍MongoDB 基本概念,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

MongoDB 基本概念

MongoDB 数据模型

image-20211105141054520

在 MongoDB 中,多个文档(document)组成集合(collection),多个集合可以组成数据库(database)。

文档(document)

文档是 MongoDB 中数据的基本单元(类似关系型数据库 MySQL 中的行),由字段(field)和值(value)对组成;字段为字符串, 值可以包括其他文档、数组和文档数组。MongoDB 文档类似于 JSON 格式文档。

  • field:必须是字符串,中间不能有空格,不能以 $ 开头( $ 是 MongoDB 特殊符号)

  • _id:作为 field ,被保留作为主键,它的值在集合中必须唯一,不可变的,可以是除数组之外的任何类型(默认自动生成)(类似关系型数据 MySQL 中的主键)

  • . 符号:MongoDB 使用点表示法来访问数组的元素和访问嵌入文档的字段

    # 数组
    "<array>.<index>"
    # 嵌套文档
    "<embedded document>.<field>"
    
_id 主键

在 MongoDB 中,存储在集合中的每个文档都需要一个惟一的 _id 字段,它充当文档的主键。如果插入的文档省略了 _id 字段,MongoDB驱动程序会自动为 _id 字段生成一个 ObjectId 对象。

_id 字段具有以下行为和约束 :

  • 默认认情况下,MongoDB 创建集合期间在 id 字段上创建一个惟一的索引
  • _id 字段总是文档中的第一个字段,如果服务器首先接收到一个没有 _id 字段的文档,那么服务器将把该字段移到开
  • _id字段可以包含任何 BSON 数据类型的值(数组除外)

以下是用于存储_id值的常见选项:

  • 使用 ObjectId
  • 如果可以的话,使用自然唯一标识符
  • 生成一个自动递增的数字
  • 在应用程序代码中生成 UUID
  • 使用驱动程序的 BSON UUID工具来生成 UUID
集合(collection)

MongoDB 将文档存储在集合中,集合就是一组文档(类似关系型数据库 MySQL 中的表)

  • 一个集合可以放置任意多个不同的文档(类似于 MySQL 的表可以有任何行)

    {"name":"zhangsan"}
    {"age":23}
    {"gender":"male"}
    {"address":"street No.156"}
    

    思考:是否有必要使用多个集合?

    答案:如果把各种各样的文档不加区分地放在同一个集合里,无论对开发者还是对管理员来说都将是噩梦。另外,在一个集合中查询特定文档在速度上也很不划算,分开查询多个集合要快得多。

    建议把同种类型的文档放在一个集合中,数据会更加集中

  • MongoDB 习惯使用 . 符号分割不同命名空间的子集合,如 blog.posts 和 blog.authors 两个集合名(类似于 Java 的包)

数据库
  • 一个 MongoDB 实例可以承载多个数据库(类似于 Redis 一个实例拥有 16 个数据库)
  • 每个数据库包含 0 个或者多个集合
  • 每个数据库都有独立的权限(建议一个应用程序的所有数据都存储在同一个数据库中)
MongoDB 系统数据库
  • admin:这个数据库是 MongoDB 的 root 数据库(可用于添加用户权限,或者查看所有数据库和关闭服务器)
  • local:这个数据库是 MongoDB 用于存储所有本地集合(永远不能复制)
  • config:这个数据库是 MongoDB 用于分片设置时存储分片信息
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

注:该命令不会显示创建的空数据库

这篇关于MongoDB 基本概念的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!