十分钟了解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.

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

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

mongo

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


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


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

db


查看需要现有的database.
show dbs

使用ooo作为database
use ooo;

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

然后是数据库的操作了:

1. 插入

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);



2. 查看数据


获取全部数据
db.xxxx.find()
获取一个数据
db.xxxx.findOne()

查询特定的记录

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



3.更新操作

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

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




4. 删除操作


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被破,人心惶惶。现在不知道情况如何。


今天就先介绍这么多吧。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。