十分钟了解MongoDB

今天写写 MongoDB的事情。这货是一个document-orientied, 基本上使用的json进行交互的。他把那个形式很像json的东西叫做BJSON. 里面有一些mongoDB自己定义的数据类型。这种数据形式在传输存储很方便。

首先介绍一下MongoDB的数据结构

  • database : 这个和mysql中的database一致。 默认使用的local, 可以自己创建新的。例如 在shell中写 db.xxx 然后就自动创建了xxx 这个collection

  • collection: 这个概念和mysql中的table保持一致。

  • document: 这个和mysql里的row或者 record保持一致。

这个是MongoDB的三个最主要的结构。

下面是如何使用。

下载安装

首先去 www.mongoDB.org 上下载一个mongoDB的最新版。然后解压到某个目录。然后使用命令行进入到该目录下。

创建 数据存储文件夹,这里可以直接创建一个 /data/db的文件夹(mkdir -p /data/db)。然后在命令行里执行如下命令启动mongodb server.

1
mongod --dbpath ./data/db

这样mongoDB就启动了,一般端口为 27017. 你可以使用help来修改Port等。这里就不过多介绍。

然后重新开一个命令窗口,使用命令进入到该目录下,执行下面语句启动mongoDB client.

1
mongo

如果使用的都是默认端口,这里就可以正常启动了。如果你修改了mongoDB server的端口,这里需要改成一致的。

数据库CRUD(Create, Retrieve, Update, Delete)操作

下面就是命令行选择database, 创建collection, 存储document。首先:

1
2
3
4
5
6
7
8
db
查看需要现有的database.
show dbs

使用ooo作为database
use ooo;

如果这里不写use ooo,那默认就是local.

然后是数据库的操作了。

插入

1
2
3
4
5
6
7
8
var a = {"value":1,"value2":['a','b']}
var b = {"value":2}
var c = {"str":‘aaa’}
插入数据,xxxx是collection
db.xxxx.save(a);
下面也是插入数据
db.xxxx.insert(b);
db.xxxx.insert(c);

查看数据

1
2
3
4
5
6
7
8
获取全部数据
db.xxxx.find()
获取一个数据
db.xxxx.findOne()

查询特定的记录

db.xxxx.find({"value":1})

更新操作

1
2
3
4
5
6
7
8
9

db.xxxx.update(
{ value: { $lt: 18 } },
{ $set: { status: "A" } },
{ multi: true }
)

这里 { value: { $lt: 18 } },是说 value < 18, { $set: { status: "A" } },是说要set status 为A, 如果没有那个域,则创建出来。
{ multi: true } 则是处理多个。

删除操作

1
2
db.xxxx.remove({"value":1})
删除value 为1 的document.

这里看起来非常简单。

结束语

MongoDB的强大之处在于 JSON串里想写什么就可以写什么。相同的collection中document可以完全不相同。(但是为了后期的维护,还是尽量相同。)这是稀疏数据库的一大优势。

建索引MongoDB有很多种,可以建立unique 索引, TTL 索引(数据会过期失效,默认为此索引), 多列组合索引,空间索引,全文索引和hash索引。这里的多列索引和mysql的一致。对于全文索引,mongoDB建议不要在生产环境(线上环境)中使用,因为这个建索引很慢,性价比不高。

对于mongoDB来说,他的索引可以使用{“backgroup”:true}来进行后台异步创建,也可以使用前台索引。但是前台索引会对性能造成极大的影响,所以mongoDB官方文档建议新起一个mongoDB server的实例进行创建。然后使用副本启动的方法将创建好的索引作为副本启动。

对于mongoDB,安全性做的比较粗略。也是对于操作,对于database等特殊数据需要分配权限。因为没有视图等概念,这些安全性做的比mysql来说粒度大了一些。但是mongoDB支持SSL方式访问,也支持kerberos认证。不过Kerberos认证现在只有微软那边在用,之前K3,K4被破,人心惶惶。现在不知道情况如何。

今天就先介绍这么多吧。