摘要
最近微信的项目快完了,开始搞网游开发,对于数据库的使用提上了日程,MySQL已经不新鲜了,对于NoSQL还不了解,所以来学学大名鼎鼎的MongoDB,在此分享学习心得。
初级知识
1. 数据库分类
SQL数据库:支持SQL语言的数据库
比如 Oracle, MySQL 。。。NoSQL数据库:不支持SQL语言的数据库
比如 Redis, MongoDB
2. MongoDB特点
- 没有表结构的概念,每条记录可以有完全不同的结构
{name:"Linda", sex:"F"}
{name:"Tom", addr:"HongKong"}
{name:"Harry", home:[{"US"},{"Florida"}]}
完全的索引支持
MongoDB支持:
单键索引,多键索引 ,数组索引,全文索引,地理位置索引redis的key-value
hbase的单索引,二级索引需要自己实现
方便的冗余和拓展
- 复制集保证数据安全
- 分片拓展数据规模
3. MongoDB 安装与配置
安装很简单,去菜鸟教程上学习安装过程即可,最新的安装也可以参考菜鸟上的指导
现在主要讲讲详细配置,我们的服务器搭建在Linux下,我们需要建立几个文件夹:
/mongodb
/data 数据
/log 日志
/conf 配置文件
/bin 二进制文件
拷贝mongod文件到bin目录下
cp ../mongo-r2.6.5/mongod bin/
在/mongodb/conf文件夹下建立一个mongod.conf文件
mongod.conf:
port = 12345
dbpath = data 数据存放的路径,绝对或相对都可以
logpath = log/mongod.log 指明一个log文件
fork = true Linux下表示这是一个后台进程
然后在/mongodb文件夹下执行命令来启动服务器
./bin/mongod -f conf/mongod.conf
4. MongoDB 客户端
使用编译时给出的客户端mongo进行连接本机12345端口下的test数据库
./mongo 127.0.0.1:12345/test
关闭客户端的方式有:
- db.shutdownServer() //需要先use admin来切换到admin权限
- 直接kill MongoDB的进程(要kill -15或不带参数)
5. MongoDB 基本操作
数据库操作
//查看数据库
show dbs
//切换数据库
use tb_name
//删除数据库(需要先用use进入一个db)
db.dropDatabase()
//新建数据库或数据集合
MongoDB不需要单独建立数据库或数据集合,在use的时候就建立了
//查看表
show collections
插入数据
//插入数据到test数据库的a表
use test
db.a.insert(JSON)
db.a.insert({x:1})//MongoDB接受一个JSON作为数据源
//插入多条数据
for(i=3;i<100;i++)db.a.insert({x:i})
查询数据
// _id: 分布式数据库唯一标识符,我们可以进行自定义,但是不可以重复,若不定义,系统会自动分配一个
db.a.find()
db.a.find(JSON)
db.a.find({x:2})
//对数据计数
db.a.find().count()
//链式操作
db.a.find().skip(3).limit(2).sort({x:1})
skip(3): 表示跳过前三行
limit(2): 表示只截取结果中的两个
sort({x:1}): 表示对x进行排序
修改数据
//简单更新x=1为x=2
db.a.update({x:1},{x:2})
//局部更新,使用set
db.a.insert({x:100,y:100,z:100})
db.a.update({x:100},{y:99})
//会导致除了y之外的数据丢失,出现如下结果
db.a.find({y:99}) => {y:99}
//这时,使用set操作符
db.a.update({x:100},{$set:{y:99}})
db.a.find({y:99}) => {x:100,y:99,z:100}
//若更新不存在的字段,加入true后可以自动insert进去
db.a.find({x:99}) => empty
db.a.update({x:100},{x:999},true)
db.a.find({x:99}) => {x:99}
//更新多条数据
db.a.insert({x:1})
db.a.insert({x:1})
db.a.insert({x:1})
db.a.find({x:1}) => 3条数据
db.a.update({x:1},{x:2})
db.a.find({x:1}) => 2条数据
db.a.find({x:2}) => 1条数据
db.a.update({x:1},{$set:{x:2}},false,true)
db.a.find({x:2}) => 3条数据
删除数据
//与update不同,remove一次性删掉所有匹配的数据
db.a.remove({x:2})
db.a.find({x:2}) => empty
//删除整个数据集
db.a.drop()
6. MongoDB 索引
//查看索引
db.a.getIndexes()
//创建索引
db.a.ensureIndex({x:1})
//这里x:1表示正向排序,x:-1表示逆向排序
其他知识库
1. 几个重要的网站
- Mongo官网 : www.mongodb.org
Mongo中文官网 : www.mongoing.com
Mongo中文文档 : docs.mongoing.com/manual-zh/
- Mongo GitHub : github.com/mongodb
- jira : jira.mongodb.org