本文已参与「掘力星计划」
MongoDB是一个基于分布式文件存储的数据库。还是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 MongoDB是“面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进。
- 安装MongoDB[YUM|二进制]
[root@master ~]# cat /etc/yum.repo.d/mongodb-enterprise.repo
[mongodb-enterprise]name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/3.2/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
[root@master ~]# yum -y install mongodb-enterprise*
[root@master ~]# service mongod start
[root@master ~]# chkconfig mongod on
[root@master ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.9.tgz
[root@master ~]# tar xf mongodb-linux-x86_64-rhel70-3.2.9.tgz -C /usr/local/mongodb
[root@master ~]# echo "export PATH=/usr/local/mongodb/bin:$PATH"
[root@master ~]# source /etc/profile
[root@master ~]# mkdir /usr/local/mongodb/data/
[root@master ~]# mongod -dpath='/usr/local/mongodb/data' >>/dev/null &
- 创建数据库
[root@master ~]# mongo
MongoDB shell version: 3.2.9
connecting to: test
2016-09-22T14:14:53.370+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:33408 #9 (1 connection now open)
Server has startup warnings:
2016-09-22T13:35:03.540+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2016-09-22T13:35:03.540+0800 I CONTROL [initandlisten]
2016-09-22T13:35:03.540+0800 I CONTROL [initandlisten]
2016-09-22T13:35:03.540+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-09-22T13:35:03.540+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-09-22T13:35:03.540+0800 I CONTROL [initandlisten]
> use password #刚创建的数据库不在列表中中,如果要显示出来需要插入一些数据
> db.pass.insert({"ICBC":"111123"."ABC":"2345"})
> db.pass.insert("zhaopin":"zhilian")
这里的db.pass.insert是一个集合,比行的功能要多很多,创建了数据库是不会在列表中显示出来的,如果要显示出来需要插入一些数据到集合中
- 插入文档
> use password #使用数据库,如果不存在则创建这个数据库
switched to db password
> db.pass.insert({"name":"ICBC","pass":"123456"}) #向pass这个集合名称插入数据,这个集合名称存在的话插入文档,不存在则创建并插入文档,使用insert() 或 save()方法向集合中插入文档WriteResult({ "nInserted" : 1 })
> db.pass.insert({"name":"ICBC"})WriteResult({ "nInserted" : 1 })
> db.pass.find() #查看集合中的数据
{ "_id" : ObjectId("57e37225ee48652129f301e6"), "name" : "ICBC", "pass" : "123456" }
{ "_id" : ObjectId("57e37232ee48652129f301e7"), "name" : "ICBC" }
- 更新文档,格式如下:
db.collection.update(
<query>, #update的查询条件,类似sql update查询内where后面的。
<update>, #update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
{
upsert: <boolean>, #可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
multi: <boolean>, #可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern: <document> #可选,抛出异常的级别。
}
)
> db.pass.insert({"name":"工商银行","address":"北沙滩桥东"}) #插入一条新的数据用来更新
WriteResult({ "nInserted" : 1 })
> db.pass.find().pretty()
{
"_id" : ObjectId("57e38cbe66ee4124c4d93b6b"),
"name" : "工商银行",
"address" : "北沙滩桥东"
}
> db.pass.update({'name':'工商银行'},{$set:{'name':"农业银行"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.pass.find().pretty()
{
"_id" : ObjectId("57e38cbe66ee4124c4d93b6b"),
"name" : "农业银行", #原来的工商银行已经改成了农业银行
"address" : "北沙滩桥东"
}
- 删除文档
db.collection.remove(
<query>, #(可选)删除的文档的条件。
{
justOne: <boolean>, #(可选)如果设为 true 或 1,则只删除一个文档。
writeConcern: <document> #(可选)抛出异常的级别。
}
)
> db.pass.find()
{
"_id" : ObjectId("57e37225ee48652129f301e6"),
"pass" : "123456"
}
{ "_id" : ObjectId("57e37232ee48652129f301e7"),
"name" : "中国银行"
}
> db.pass.remove({'name':"中国银行"}) #删除一个文档
WriteResult({ "nRemoved" : 1 })
> db.pass.find(){
"_id" : ObjectId("57e37225ee48652129f301e6"),
"pass" : "123456"
}
- 查询文档
> db.pass.find().pretty() #以易读的方式来读取数据
{
"_id" : ObjectId("57e37225ee48652129f301e6"),
"pass" : "123456"
}
{
"_id" : ObjectId("57e37232ee48652129f301e7"),
"name" : "中国银行"
}
{
"_id" : ObjectId("57e38cbe66ee4124c4d93b6b"),
"name" : "农业银行",
"address" : "北沙滩桥东"
}
-----------------------------------------------
> db.pass.find().pretty() #以非结构化的方式显示所有文档
{ "_id" : ObjectId("57e37225ee48652129f301e6"), "pass" : "123456" }
{ "_id" : ObjectId("57e37232ee48652129f301e7"), "name" : "中国银行" }
{ "_id" : ObjectId("57e38cbe66ee4124c4d93b6b"), "name" : "农业银行", "address" : "北沙滩桥东"}
- mongodb开机启动脚本
#!/bin/bash
#chkconfig:2345 25 25
#Description:This file is for mongodb
basedir=/usr/local/mongodb-3.2.10
binsdir=$basedir/bin
datadir=$basedir/data
logsdir=$basedir/syslog
name=mongod
checkpid(){
pid=`pgrep mongod`
}
echologs(){
ps=`pgrep $name`
if [[ -z $ps ]];then
echo "Failed!!! $@"
else
echo "Success!!! $@"
fi
}
start(){
checkpid
if [[ $pid == "" ]];then
$binsdir/$name --logpath $logsdir/sys.log --dbpath $datadir --fork 2>&1 >>/dev/null echologs
else
echo "Mongodb has already in running, pid is $pid"
fi
}
stop(){
checkpid
if [ ! -z $pid ];then
$binsdir/$name --shutdown --dbpath $datadir 2>1 >>/dev/null
[[ -z $(`pgrep $name`) ]] && echo "Success!!! $@" || echo "Failed!!!"
else
echo "Mongodb not running. $@ "
fi
}
status(){
checkpid
if [ ! -z $pid ];then
echo "Mongodb is running, pid is $pid."
else
echo "Mongodb is not running."
fi
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
stop
start ;;
status)
status ;;
*)
echo "Usage: $0 {start | stop | restart | status}"
exit 0 ;;
esac
exit 0