这门mongo university的公开课于本月12号正式开始了。从名字就可以看出,这是一门入门级课程,结合nodejs来介绍mongodb。对于nosql数据库我了解不多,自己一直接触到的都是传统的MySQL或是postgreSQL。随着学习发展方向逐渐向前端转移,类似mongo这样可以便捷处理JSON的数据库也成为前进道路上必须了解的技术。那么就跟着我一起来一探mongo的究竟吧。
Week1 - Introduction
第一周是群众喜闻乐见的概括性介绍。总体来说,mongo有三大特点:
- 非关系型。前面说过了,mongo是nosql型的非传统数据库。
- mongo实际上是一个JSON文件的存储库,所以mongo里存储的都是标准JSON对象。
- 可编程。既然存储的是JSON,自然可以轻易编程来改变其结构。
和传统的SQL数据库相比,mongo有两个不支持的特性:
- 不支持JOINS。不存在关系,自然也无法JOIN了。
- 不支持TRANSACTIONS。这一点也是和JSON特性有关,后面的课程会做详细说明。
mongo主要由mongo数据库和mongo shell组成。数据库部分是本课程学习的重点,后面的课程会逐渐展开。mongo shell是一个基于google V8的运行在客户端的shell程序,可用来对数据库做各种管理和操作,也支持JS编程。mongo shell的概念有些类似node,都是运行在客户端的JS运行环境。他们的区别在于mongo shell是同步执行的的,而node是异步的。
mongo的安装已经完全傻瓜化了,各位自行上官网脑补吧。这里要注意的是,尽量选择64位版。32位版本对文件尺寸有天然的限制,会对大规模的部署应用造成不便。(不过对本课程来说32位也足够应付了)。
由于本人不使用windows系统,所以没有观看windows安装配置的部分。这里只以mac/linux为例说明各种操作。
mongo安装完毕后,最好在home目录下创建一个数据库目录作为mongo的默认存储路径:
mkdir -p /data/db
然后在终端输入mongod就可以启动mongo数据库了。mongo shell的启动指令是mongo,启动shell后就可以在>提示符后作数据库操作了。
这里例举几个常用的操作:
use db_name // 切换至db_name数据库
db.collection.find() // 从collection中选择部分的文档,并返回一个指向选择文件的指针
db.collection.findOne() // 在collection中选择一个符合条件的文档,findOne返回的是文档本身而不是指针
db.collection.insert() // 向collection中插入一个JSON对象
show dbs // 现实所有数据库
list collections // 列出该数据所有collection
mongorestore dump // 将dump文件导入数据库
find和findOne操作还可以附加查询条件,不过应付第一周的作业,直接用就可以了。详细的使用方法后面几周会逐渐介绍的。
JSON入门
我对JSON已经有一定了解,这里就不再重复细节了。需要的同学请自行上http://www.json.org/查询其标准。
简单地说,JSON就是由键值序列组成的JS对象集合。JSON中只有Array和map(也叫做对象)这两种结构,但值可以是任意类型,JSON对象也可以任意嵌套成复杂对象。
这里介绍几个好用的JSON工具:
- JSONLint validator: 检查JSON对象的正确性
- 更好用的是这个JSON parser online: 整理JSON对象使其使其更易读,也附带有正确性检查功能
Mongo和node应用
在node应用中使用mongo,需要使用nodejs driver进行相互间的通信。这个driver的安装也是非常简单的:
npm install mongodb
然后就可以在node应用的代码中加上:
var MongoClient = require('mongodb')
来调用mongo的应用接口了。下面附上一个完整的例子,从test数据库的coll集合中返回并打印第一个对象:
var MongoClient = require('mongodb');
MongoClient.connect('mongodb://localhost:27017/test', function (err, db) {
if (err) throw err;
db.collection('coll').findOne({}, function (err, doc) {
if (err) throw err;
console.dir(doc);
db.close();
});
});
对于熟悉node的人来说,mongo的应用接口操作起来还是相当直观顺手的。
好了,第一周就到这里了。作业都很简单,十分钟内完全可以搞定。让我们期待第二周CRUD吧。