直接去看mongodb官网的文档学习是最快捷的途径。链接如下:https://docs.mongodb.com/manual/tutorial/getting-started/
一、基础概念
Mongodb是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中应用功能最丰富的,最像关系数据库的数据库。它支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点在于它支持查询语言非常强大,语法类似于面向对象的查询语言,可以实现类似关系数据库中单表查询的绝大部分功能,而且支持对数据创建索引。它是面向集合的存储方式。每个集合在数据库中有唯一的标识名称,可包含无限个数目的文档。集合的概念类似于关系型数据库中的表,但不同的是它不需要定义任何模式。文档是这个数据库的基本单位,类似于关系数据库中的行的概念,但是比行复杂。多个键及其关联的值有序地存放在一起就构成了文档。集合是一组文档,一个数据库中可以有多个不同的集合。一个Mongodb实例可以承载多个数据库,数据库之间相互独立,但有三个系统数据库在Mongodb创建之初就存在,即为:
MongoDB的使用场景有以下几个方面:
-
Craiglist上使用MongoDB的存档数十亿条记录。
-
FourSquare,基于位置的社交网站,在Amazon EC2的服务器上使用MongoDB分享数据。
-
Shutterfly,以互联网为基础的社会和个人出版服务,使用MongoDB的各种持久性数据存储的要求。
-
bit.ly, 一个基于Web的网址缩短服务,使用MongoDB的存储自己的数据。
-
spike.com,一个MTV网络的联营公司, spike.com使用MongoDB的。
-
Intuit公司,一个为小企业和个人的软件和服务提供商,为小型企业使用MongoDB的跟踪用户的数据。
-
sourceforge.net,资源网站查找,创建和发布开源软件免费,使用MongoDB的后端存储。
-
etsy.com ,一个购买和出售手工制作物品网站,使用MongoDB。
-
纽约时报,领先的在线新闻门户网站之一,使用MongoDB。
-
CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB。
1、Collection(集合)
Create a Collection(创建集合)
如果不存在集合,则在您第一次为该集合存储数据时,MongoDB会创建该集合。
db.myNewCollection2.insertOne( { x: 1 } ) db.myNewCollection3.createIndex( { y: 1 } )
Explicit Creation(显式创建)
MongoDB提供db.createCollection()方法来显式创建具有各种选项的集合,例如设置最大大小或文档验证规则。如果未指定这些选项,则无需显式创建集合,因为在首次存储集合数据时,MongoDB会创建新集合。
Document Validation(文件验证)
默认情况下,集合不需要其文档具有相同的架构;即,单个集合中的文档不需要具有相同的字段集,并且字段的数据类型可以在集合中的不同文档之间有所不同。
但是,从MongoDB 3.2开始,您可以在更新和插入操作期间对集合强制执行文档验证规则。有关详细信息,请参见架构验证。
Modifying Document Structure(修改文件结构)
要更改集合中文档的结构,例如添加新字段,删除现有字段或将字段值更改为新类型,请将文档更新为新结构。
Unique Identifiers(唯一标识符)
集合被分配了一个不变的UUID。集合UUID在副本集的所有成员和分片群集中的分片上均保持相同。
2、Documents(文档)
Mongodb将数据记录为BSON文档,BSON文档是JSON文件的二进制表示形式。文档结构是由字段和值对组成,具有以下结构:
{
field1 : value1 ,
field2 : value2 ,
field3 : value3 ,
...
fieldN : valueN
}
字段的值可以是任何BSON数据类型,包括其他文档,数组和文档数组。
var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date(‘Jun 23, 1912‘),
death: new Date(‘Jun 07, 1954‘),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}
上面的字段具有以下数据类型:
-
_id
拥有一个ObjectId。 -
name
包含一个字典。 -
birth
并death
保留Date类型的值。 -
contribs
持有字符串数组。 -
views
拥有NumberLong类型的值。
Field Names(字段名)
字段名称是字符串。字段名_id被用来保存主键,它的值必须在collection中保持唯一,可以是数组以外的任何类型。另外,字段名称不能包含空字符;在3.6版本后允许字段名称包含以“.”或者“$”开头的字段名称。
虽然BSON文档可能有多个具有相同名称的字段。但是,大多数MongoDB接口代表的MongoDB具有不支持重复字段名称的结构(例如哈希表)。如果需要处理具有多个同名字段的文档,请参见驱动程序的驱动程序文档。
Dot Notation(点表示法,点取值法)
MongoDB使用点表示法来访问数组的元素并访问嵌入式文档的字段。
"<array>.<index>"
比如:
{ ... contribs: [ "Turing machine", "Turing test", "Turingery" ], ... }
要指定contribs数组中的第三个元素,请使用点符号“ contribs.2”。
具体数组的查询,详见
Embedded Documents(嵌入文档)
要使用点符号指定或访问嵌入式文档的字段,请将嵌入式文档名称与点(.)和字段名称连接在一起,并用引号引起来:
{ ... name: { first: "Alan", last: "Turing" }, contact: { phone: { type: "cell", number: "111-222-3333" } }, ... }
要在名称字段中指定名为last的字段,请使用点符号“ name.last”。 要在电话文档中的联系人字段中指定号码,请使用点符号“contact.phone.number”。
具体字典查询,详见:
The _id
Field(id字段)
在MongoDB中,存储在集合中的每个文档都需要一个唯一的_id字段作为主键。如果插入的文档省略了_id字段,则MongoDB驱动程序会自动为_id字段生成ObjectId。
_id字段具有以下行为和约束:
- 默认情况下,MongoDB在创建集合时会在_id字段上创建唯一索引。
- _id字段始终是文档中的第一个字段。如果服务器首先接收到没有_id字段的文档,则服务器会将字段移到开头。
- _id字段可以包含任何BSON数据类型的值,只要不是数组。
Other Uses of the Document Structure(使用其他文档结构)
除了定义数据记录,MongoDB还在整个文档结构中使用,包括但不限于:查询过滤器,更新规范文档和索引规范文档。
Query Filter Documents(查询过滤文档)
查询过滤器文档指定确定用于选择哪些记录以进行读取,更新和删除操作的条件。
您可以使用<field>:<value>表达式指定相等条件和查询运算符表达式。
{ <field1>: <value1>, <field2>: { <operator>: <value> }, ... }
例子可详见:
- Query Documents
- Query on Embedded/Nested Documents
- Query an Array
- Query an Array of Embedded Documents
Update Specification Documents(更新某个特殊文档)
更新规范文档使用更新运算符来指定要在db.collection.update()操作期间对特定字段执行的数据修改。
{ <operator1>: { <field1>: <value1>, ... }, <operator2>: { <field2>: <value2>, ... }, ... }
更多可详见: Update specifications.
Index Specification Documents(特殊文档索引)
索引规范文档定义了要索引的字段和索引类型:
{ <field1>: <type1>, <field2>: <type2>, ... }
未完待续!