ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MongoDB 基本概念

2021-11-17 18:34:27  阅读:126  来源: 互联网

标签:MongoDB 数据库 id 文档 集合 主键 基本概念


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,数据库,id,文档,集合,主键,基本概念
来源: https://www.cnblogs.com/zkatr/p/15568636.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有