# mongodb的介绍与使用

这两天看了下mongoDB权威指南,记录下笔记,相关的细节还是要去看文档。

# 一.mongo的安装

mongo的安装很简单,新的版本可以直接从官网下载,解压后直接使用。

# 二.启动与连接

mongo的启动有两种方式:

1.通过配置文件启动

logpath=/opt/mongodb/data/mongo_27017/mongod27017.log
logappend=true
fork=true
dbpath=/opt/mongodb/data/mongo_27017
pidfilepath=/opt/mongodb/data/mongo_27017/mongod_27017.pid
port=27017

2.启动时指定参数

./bin/mongod --port 27017 --fork --logpath /opt/mongodb/data/mongo_27017/mongod27017.log --dbpath /opt/mongodb/data/mongo_27017 --pidfilepath /opt/mongodb/data/mongo_27017/mongod_27017.pid

连接mongo也很简单,比如可以在终端通过mongo命令直接连接,也可以使用如Robo 3T这类的图形化工具

关闭mongo也很简单,直接kill即可,不要kill -9 或pkill。

# 三.mongo的数据库,集合,文档

如果对应mysql来理解的话,类似如下表格

RDBMS MongoDB
Table(表) Collection(集合)
Records / Rows(记录/列) Document / Object(文档/对象)

也就是一个文档类似于mysql的一行数据,多个文档组成的集合类似于mysql的一个表。多个集合就组成一个数据库了。一个mongo实例可以包含多个数据库

文档的格式是json的,如

{ site : "w3cschool.cc" }

集合如下面这个列子,它包含了两个文档

{"name":"mengxiangyue"} {"Name":"mengxiangyue","sex":"nan"}

# 四.常用命令

查看数据库

show dbs

使用某个数据库

use 数据库名称

查看数据库的集合

db.getCollectionInfos()

集合查询

db.user.find()

指定条件查询

db.user.find({"name":"jack"})

插入

db.foo.insert({"bar":"baz"})

insert 插入

db.foo.insert({"bar":"baz"})

remove 删除

db.users.remove()
db.mailing.list.remove({"opt-out":true})
db.drop_collection("bar")

update 更新

var joe = db.users.findOne({"name":"joe"})
db.users.update({"name":"joe"},joe)

排序

db.COLLECTION_NAME.find().sort({KEY:1})

# 五.索引

创建索引

db.COLLECTION_NAME.ensureIndex({KEY:1})

删除索引

db.collection.dropIndexes();
db.collection.dropIndex({x: 1, y: -1})

重建索引

db.myCollection.reIndex()
// same as:
db.runCommand( { reIndex : 'myCollection' } )

# 六.主从,副本集,分片

# 1.主从

主从的概念和mysql的一样,可用于备份,故障恢复,读扩展等。如下图

mongo1.jpg

# 2.副本集

1.集群中没有特定的主数据库。
2.如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能

如图

mongo2.jpg

# 3.分片

分片就是把一个数据分摊到多个实例上,如图

mongo3.jpg

这部分参考:http://blog.csdn.net/canot/article/details/50739359