MongoDB 简介

MongoDB是一个跨平台的,面向文档的数据库,可提供高性能,高可用性和易扩展性。MongoDB致力于收集和文档的概念。

什么是MongoDB

MongoDB是一个数据库程序,MongoDB用C ++语言编写。

  • 免费 – 您无需为在应用程序中使用它而付出任何代价。

  • 开源 – 开源是开放的,开源社区为MongoDB数据库程序的开发做出了贡献。

  • 跨平台 –  MongoDB构建在一个平台(例如Linux)上,并且可以在其他平台(Windows,MacOS等)上运行,而无需对代码进行任何修改。

  • 面向文档 –  MongoDB以JSON形式存储记录(如文档)。这样做有很多优点。一个显着的优点是,向数据库添加新功能(关系数据库中的列)不需要麻烦。

  • NoSQL(不仅是SQL) –  MongoDB使用基于文档的数据库,其中每个文档都是具有复杂值的键。该文档值可以包含多个键值对。

数据库

数据库是用于收集的物理容器。每个数据库在文件系统上都有其自己的文件集。一台MongoDB服务器通常具有多个数据库。

集合

集合是一组MongoDB文档。它等效于RDBMS表。集合存在于单个数据库中。集合不强制执行架构。集合中的文档可以具有不同的字段。通常,集合中的所有文档都具有相似或相关的目的。

文档

文档是一组键值对。文档具有动态架构。动态模式意味着同一集合中的文档不需要具有相同的字段或结构集,并且集合文档中的公共字段可以保存不同类型的数据。

下表显示了RDBMS术语与MongoDB的关系。

关系数据库管理系统MongoDB
数据库数据库
集合

元组/行

文档
字段
表联结嵌入式文档
主键约束主键(MongoDB本身提供的默认键_id)
数据库服务器和客户端
mysqld / Oraclemongod
mysql / sqlplusmongo

示例文档

以下示例显示了博客站点的文档结构,它只是一个逗号分隔的键值对。

{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: '基础教程',
   url: 'https://www.nhooo.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100, 
   comments: [	
      {
         user:'user1',
         message: 'My first comment',
         dateCreated: new Date(2011,1,20,2,15),
         like: 0 
      },
      {
         user:'user2',
         message: 'My second comments',
         dateCreated: new Date(2011,1,25,7,45),
         like: 5
      }
   ]
}

_id是一个12字节的十六进制数字,它保证了每个文档的唯一性。您可以在插入文档时提供id。如果不提供,那么MongoDB会为每个文档提供一个惟一的id。这12个字节的前4个字节用于当前时间戳,接下来的3个字节用于机器id,接下来的2个字节用于MongoDB服务器的进程id,剩下的3个字节是简单的增量值。