MongoDB Quick Tips
1. 介绍
一个mongod服务可以有建立多个数据库,每个数据库可以有多张表,这里的表名叫collection,每个collection可以存放多个文档(document),每个文档都以BSON(binary json)的形式存放于硬盘中,因此可以存储比较复杂的数据类型。它是以单文档为单位存储的,你可以任意给一个或一批文档新增或删除字段,而不会对其它文档造成影响,这就是所谓的schema-free,这也是文档型数据库最主要的优点。跟一般的key-value数据库不一样的是,它的value中存储了结构信息,所以你又可以像关系型数据库那样对某些域进行读写、统计等操作。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。Mongo还可以解决海量数据的查询效率,根据官方文档,当数据量达到50GB以上数据时,Mongo数据库访问速度是MySQL10 倍以上。
BSON
BSON是Binary JSON 的简称,是一个JSON文档对象的二进制编码格式。BSON同JSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型。如:BSON有Date类型和BinDate类型。
BSON被比作二进制的交换格式,如同Protocol Buffers,但BSON比它更“schema-less”,非常好的灵活性但空间占用稍微大一点。
BSON有以下三个特点:
1. 轻量级
2. 跨平台
3. 效率高
命名空间
MongoDB存储BSON对象到collections,这一系列的数据库名和collection名被称为一个命名空间。如同:java.util.List;用来管理数据库中的数据。
索引
mongodb可以对某个字段建立索引,可以建立组合索引、唯一索引,也可以删除索引,建立索引就意味着增加空间开销。默认情况下每个表都会有一个唯一索引:id,如果插入数据时没有指定id,服务会自动生成一个id,为了充分利用已有索引,减少空间开销,最好是自己指定一个unique的key为id,通常用对象的ID比较合适,比如商品的ID。
2. 安装
Linux系统下有两种安装方式:
第一种:下载二进制包,然后解压到相应目录即可。
直接到官网下载二进制包,下载以后是一个tgz文件。
curl http://downloads.mongodb.org/linux/mongodb-linux-i686-2.4.3.tgz > mongodb.tgz
将文件解压到指定目录
tar -zxvf mongodb.tgz
重命名:
cp -R -n mongodb-linux-????-??-??/ mongodb
在 mongodb/bin 目录下可以看到和MongoDB相关的一些二进制文件包括 mongod 等。
到此为止MongoDB已经安装完成,接下来开始使用MongoDB:
在第一次启动mongdod的时候,需要创建存放数据文件的目录,默认的目录是 /data/db/
首先创建这个目录: mkdir -p /data/db
注意:
要确保运行 mongod 进程的系统用户对改目录拥有读写权限。
如果 mongod 运行在 mongo 用户帐号下,可以使用
chown mongo /data/db
命令来更改该目录的拥有者。
至此,我们已经可以运行 mongod ,也可以通过 mongo 命令来链接到数据库,前提是这两个命令要在 MongoDB 的安装目录下的bin目录下执行。
如果要直接使用这两个命令,需要将它们添加到系统的环境变量里面去,方法是在bin目录下执行
sudo cp mongo /usr/bin/
之后就可以在任意目录使用 mongo 命令了。
将mongodb 加入到开机启动,
sudo gedit /etc/rc.local
编辑 rc.local 加入
1 2 3 |
|
注意.地址可能需要修改。
第二种:通过命令行安装。
1
|
|
该命令会安装以下软件包:
mongodb-clients
mongodb-dev
mongodb-server
mongodb
安装完成以后会生成以下文件:
数据文件: /var/lib/mongodb
日志文件: /var/log/mongodb/mongodb.log
服务脚本: /etc/init.d/mongodb
配置文件: /etc/mongodb.conf
如果要修改启动选项可以直接修改这个文件。
安装完成以后会在系统中新建一个用户 mongodb,会用这个用户帐号来启动 MongodDB,
MongodDB默认使用27017端口,通过 netstat -tlunp | grep 27017
可以查看到进程。
如果要以其他用户来运行Mongodb,需要修改 /var/lib/mongodb 和 /var/log/mongodb的权限。
可以通过命令 sudo service mongodb start/stop/restart/status
来控制mongod进程。
3. 使用
打开终端,输入 mongo 命令,连接到MongoDB数据库:
╭─# ivan@ubuntu in ~/work ‹ruby-1.8.7@rails304›
╰─$ mongo
MongoDB shell version: 2.0.4
connecting to: test
>
简单操作命令:
- 进入数据库 admin:
use admin
- 增加或修改用户密码:
db.addUser('name','pwd')
- 查看用户列表
db.system.users.find()
- 用户认证
db.auth('name','pwd')
- 删除用户
db.removeUser('name')
- 查看所有用户
show users
- 查看所有数据库
show dbs
- 查看所有的 collection
show collections
- 查看各 collection 的状态
db.printCollectionStats()
- 查看主从复制状态
db.printReplicationInfo()
- 修复数据库
db.repairDatabase()
- 设置记录 profiling,0=off 1=slow 2=all
db.setProfilingLevel(1)
- 查看profiling
show profile
- 拷贝数据库
db.copyDatabase('mail_addr','mail_addr_tmp')
- 删除 collection
db.mail_addr.drop()
- 删除当前的数据库
db.dropDatabase()
增删改
- 存储嵌套的对象
1
|
|
- 存储数组对象
1
|
|
- 根据query条件修改,如果不存在则插入,允许修改多条记录
1
|
|
- 删除yy=5的记录
1
|
|
- 删除所有的记录
1
|
|
索引
- 增加索引:1(ascending),-1(descending)
1
|
|
- 索引子对象
1
|
|
- 查看索引信息
1 2 |
|
- 根据索引名删除索引
1
|
|
查询
- 查找所有
1
|
|
- 查找一条记录
1
|
|
- 根据条件检索10条记录
1
|
|
- sort排序
1 2 |
|
- count操作
1
|
|
- distinct操作,查询指定列,去重复
1
|
|
- ”>=”操作
1
|
|
- 子对象的查找
1
|
|
管理
- 查看collection数据的大小
1
|
|
- 查看colleciont状态
1
|
|
- 查询所有索引的大小
1
|
|