第一节 - 基础知识.pdf
文本预览下载声明
第⼀章 - 基础知识
我们通过学习 MongoDB 的基本⼯作原理,开始我们的 MongoDB 之旅。当然,这是
学习 MongoDB 的核⼼,它也能帮助我们回 诸如,MongoDB 适⽤于哪些场景这些更
⾼层次的问题。
开始之前,这有六个简单的概念我们需要了解⼀下。
1. MongoDB 中的 database 有着和你熟知的数据库⼀样的概念 (对 Oracle 来说
就是 schema) 。⼀个 MongoDB 实例中,可以有零个或多个数据库,每个都作为
⼀个⾼等容器,⽤于存储数据。
2. 数据库中可以有零个或多个 collections (集合) 。集合和传统意义上
的 table 基本⼀致,你可以简单的把两者看成是⼀样的东西。
3. 集合是由零个或多个 documents (⽂档)组成。同样,⼀个⽂档可以看成是
⼀ row。
4 . ⽂档是由零个或多个 fields (字段)组成。, 没错,它就是 columns。
5. Indexes (索引)在 MongoDB 中扮演着和它们在 RDBMS 中⼀样的⾓⾊。
6. Cursors (游标)和上⾯的五个概念都不⼀样,但是它⾮常重要,并且经常被忽
视,因此我觉得它们值得单独讨论⼀下。其中最重要的你要理解的⼀点是,游
标是,当你问 MongoDB 拿数据的时候,它会给你返回⼀个结果集的指针⽽不
是真正的数据,这个指针我们叫它游标,我们可以拿游标做我们想做的任何事
情,⽐如说计数或者跨⾏之类的,⽽⽆需把真正的数据拖下来,在真正的数据
上操作。
综上,MongoDB 是由包含 collections 的 databases 组成的。
⽽ collection 是由 documents组成。每个 document是由 fields 组
成。 Collections 可以被 indexed,以便提⾼查找和排序的性能。最后,当我们
从 MongoDB 获取数据的时候,我们通过 cursor 来操作,读操作会被延迟到需要实
际数据的时候才会执⾏。
那为什么我们需要新的术语(collection s. table , document s. row and field s. column) ?
为了让看起来更复杂点?事实上,虽然这些概念和关系型数据中的概念类似,但是还
是有差异的。核⼼差异在于,关系型数据库是在 table 上定义的columns,⽽⾯向
⽂档数据库是在 document 上定义的 fields。也就是说,在 collection 中的每
个 document 都可以有它⾃⼰独⽴的 fields。因此,对于 collection 来说是个
简化了的 table ,但是⼀个 document 却⽐⼀ row 有更多的信息。
虽然这些概念很重要,但是如果现在搞不明⽩也不要紧。多插⼏条数据就明⽩上⾯说
的到底是什么意思了。反正,要点就是,集合不对存储内容严格限制 (所谓的⽆模式
(schema-less)) 。字段由每个独⽴的⽂档进⾏跟踪处理。这样做的优点和缺点将在下⾯
章节⼀⼀讨论。
好了我们开始吧。如果你还没有运⾏ MongoDB ,那么快去运⾏ mongod 服务和开启
mongo shell 。shell ⽤的是 Ja aScript 。你可以试试⼀些全局命令,⽐如 help 或
者 exit。如果要操作当前数据库,⽤ db ,⽐如 db.help() 或者db.stats()。如
果要操作指定集合,⼤多数情况下我们会操作集合⽽不是数据库,
⽤ db.COLLECTION_N ME ,⽐如db.unicorns.help() 或
者 db.unicorns.count()。
我们继续,输⼊ db.help(),就能拿到⼀个对 db 能执⾏的所有的命令的列表。
顺便说⼀句:因为这是⼀个 Ja aScript shell ,如果你输⼊的命令漏了 (),你会看到这个
命令的源码,⽽不是执⾏这个命令。我提⼀下,是为了避免你执⾏漏了括号的命令,
拿到⼀个以 function (...){ 开头的返回的时候,觉得神奇不可思议。⽐如说,
如果你输⼊ db.help (不带括号), 你会看到 help ⽅法的内部实现。
⾸先我们⽤全局的 use 来切换数据库,继续,输⼊ use learn。这个数
显示全部