部分内容摘自runoob.com
MongoDB简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB特性
面向文档存储,操作起来比较简单和容易。
可以在MongoDB记录中设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序。
可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载增加 ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
结合RUNOOB.COM的文档 MongoDB概念解析和MongoDB c++ driver的API官方文档,学习一下MongoDB中的概念与其对应的类,以及相关的基本操作。
- 基本概念
1.1 数据库 database
1.2 集合 collection
1.3 文档 document
1.4 常用数据类型
1.5 命名规范
1. 基本概念(与关系型数据库对照)
参考下表可以帮助理解,但并不等同,比如说MongoDB中的document并不与记录等同。
database中有多个collection,每个collection中有多个文档document,document中有多个字段……
1.1 数据库database
跟关系型数据库中的概念没太大差别。
如何在自己的C++工程中链接数据库和插入文档在此系列的第一篇博客。
1.2 集合 collection
集合就是 MongoDB 文档组,类似于 RDBMS 中的表。
集合存在于数据库中,集合没有固定的结构,也就是说可以在集合中插入不同格式和类型的数据,比如在一个集合中但通常情况下我们插入集合的数据都会有一定的关联性。
1.3 文档 document
文档是一组键值(key-value)对(即bson,见另一篇写bson的博客)。
MongoDB中的文档具有灵活的模式,文档在同一集合,但它们不需要具有相同的字段或结构集合,集合文档中的公共字段可以包含不同类型的数据。
与SQL数据库不同,SQL数据库必须在插入数据之前确定和声明表的模式,MongoDB的集合不会强制执行文档结构。这种灵活性有助于将文档映射到实体或对象。 每个文档可以匹配表示实体的数据字段,即使数据具有实质性的变化。然而,集合中的文档具有类似的结构。
需要注意的有:
1. 文档中的键/值对是有序的。
2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3. MongoDB区分类型和大小写。
4. MongoDB的文档不能有重复的键。
5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
一个实例 摘自易百教程
假设客户需要他的博客/网站的数据库设计,并查看RDBMS和MongoDB架构设计之间的区别。网站有以下要求。
每个帖子都有唯一的标题,描述和网址。
每个帖子都可以有一个或多个标签。
每个帖子都有其发布者的名称和总人数。
每个帖子都有用户给出的评论以及他们的姓名,消息,数据时间和喜好。
每个帖子可以有零个或多个评论。
在RDBMS架构中,上述要求的设计将具有最少的三个表。表与表之间的关系如下 -
使用MongoDB的话,只需要建立一个collection
{
_id: POST_ID
title: TITLE_OF_POST,
description: POST_DESCRIPTION,
by: POST_BY,
url: URL_OF_POST,
tags: [TAG1, TAG2, TAG3],
likes: TOTAL_LIKES,
comments: [
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
},
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
}
]
}
1.4 常用数据类型
见下表
1.5 命名规范
集合的命名规范
- 集合名不能是空字符串”“。
- 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
- 集合名不能以”system.”开头,这是为系统集合保留的前缀。
- 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
文档的命名规范
文档键命名规范:
- 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
- 点 . 和$有特别的意义,只有在特定环境下才能使用。
- 以下划线”_”开头的键是保留的(不是严格要求的)。