目录
一、MongoDB使用场景
mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。
适用于以下场景:
1.网站数据:mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2.缓存:由于性能很高,mongo也适合作为信息基础设施的缓存层。在系统重启之后,由mongo搭建的持久化缓存可以避免下层的数据源过载。
3.大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
4.高伸缩性的场景:mongo非常适合由数十或者数百台服务器组成的数据库。
5.用于对象及JSON数据的存储:mongo的BSON数据格式非常适合文档格式化的存储及查询。
不适合的场景:
1.高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
2.传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
3.需要SQL的问题。
二、安装
1、下载
下载地址:https://www.mongodb.org/dl/linux
或者
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz
2、解压
解压至/usr/local/mongodb
tar -zxvf mongodb-linux-x86_64-4.0.2.tgz
mv mongodb-linux-x86_64-4.0.2.tgz /usr/local/mongodb
3、配置
3.1、配置相关目录,data数据库目录,log日志目录,etc配置文件目录
cd /usr/local/mongodb
mkdir data
mkdir log
mkdir etc
3.2、配置文件
vim /usr/local/mongodb/etc/mongodb.conf
内容如下
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
fork=true
journal=false
storageEngine=mmapv1
3.3、配置系统路径,方便随处使用mongo命令
vim /etc/profile
添加
PATH=$PATH:/usr/local/mongodb/bin
执行source /etc/profile,使系统环境变量立即生效
测试是否生效,which mongo
3.4、配置系统服务,方便启动、停止、重启
vim /etc/rc.d/init.d/mongod
内容如下
start() {
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/etc/mongodb.conf
}
stop() {
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/etc/mongodb.conf --shutdown
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo
$"Usage: $0 {start|stop|restart}"
exit 1
esac
赋予执行权限,chmod +x /etc/rc.d/init.d/mongod
测试启动停止重启
service mongod start
service mongod stop
service mongod restart
三、使用
1、数据库的增删
1.1、创建数据库
以下实例我们创建了数据库 log_sys:
> use log_sys
switched to db log_sys
> db
log_sys
如果你想查看所有数据库,可以使用 show dbs 命令:
> show dbs
admin 0.000GB
local 0.000GB
>
1.2、删除数据库
切换到数据库 log_sys:
> use log_sys
switched to db log_sys
>
执行删除命令:
> db.dropDatabase()
{ "dropped" : "log_sys", "ok" : 1 }
2、集合的增删
2.1、创建集合
在 log_sys 数据库中创建 order_log 集合:
> use log_sys
switched to db log_sys
> db.createCollection("order_log")
{ "ok" : 1 }
>
createCollection()方法还有其他几个关键参数:
创建固定集合 order_log,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
> db.createCollection("order_log", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
{ "ok" : 1 }
>
capped-(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
autoIndexId-(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size-(可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。
max-(可选)指定固定集合中包含文档的最大数量。
2.2、删除集合
show collections命令查看已存在的集合:
>use log_sys
switched to db log_sys
>show collections
order_log
pay_log
>
删除集合
>db.order_log.drop()
true
>
查看是否成功删除可以执行查看
>show collections
pay_log
>
3、文档的增删改查
3.1、文档的新增
>db.order_log.insert({title: '架构进阶之路',
description: '这是我的个人公众号'
})
3.2、文档的更新
语法格式为
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
query-update的查询条件,类似sql update查询内where后面的。
update-update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert-可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi-可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern-可选,抛出异常的级别。
只更新一条记录,将title是 架构进阶之路 的记录的title更新为 架构进阶之路公众号
> db.order_log.update({'title':'架构进阶之路'},{$set:{'title':'架构进阶之路公众号'}})
更新全部符合条件的记录,将title是 架构进阶之路 的记录的title更新为 架构进阶之路公众号
> db.order_log.update({'title':'架构进阶之路'},{$set:{'title':'架构进阶之路公众号'}},false,true)
3.3、文档的删除
语法格式为
db.collection.remove(
<query>,
<justOne>
)
query-(可选)删除的文档的条件。
justOne-(可选)如果设为 true 或 1,则只删除一个文档。
删除title为 架构进阶之路 的多条记录为
>db.order_log.remove({'title':'架构进阶之路'})
删除第一条找到的记录为
> db.order_log.remove({'title':'架构进阶之路'},1)
删除全部的记录为
> db.order_log.remove({})
3.4、文档的查询
语法格式为
db.collection.find(query, projection)
query-可选,使用查询操作符指定查询条件
projection-可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
以下示例,相当于mysql的 where title = '架构进阶之路' and description = '这个我的个人公众号'
> db.order_log.find({"title":"架构进阶之路", "description":"这个我的个人公众号"})
以下示例,相当于mysql的 where buy_nums < 50
> db.order_log.find({"buy_nums":{$lt:50}})
以下示例,相当于mysql的 where buy_nums <= 50
> db.order_log.find({"buy_nums":{$lte:50}})
以下示例,相当于mysql的 where buy_nums > 50
> db.order_log.find({"buy_nums":{$gt:50}})
以下示例,相当于mysql的 where buy_nums >= 50
> db.order_log.find({"buy_nums":{$gte:50}})
以下示例,相当于mysql的 where buy_nums != 50
> db.order_log.find({"buy_nums":{$ne:50}})
以下示例,相当于mysql的 where title = '架构进阶之路' or description = '这个我的个人公众号'
> db.order_log.find({$or:[{"title":"架构进阶之路", "description":"这个我的个人公众号"}]})
以下示例,相当于mysql的 where buy_nums > 50 and (title = '架构进阶之路' or description = '这个我的个人公众号')
> db.order_log.find({"buy_nums":{$gt:50},$or:[{"title":"架构进阶之路", "description":"这个我的个人公众号"}]})
以下示例,相当于mysql的 where buy_nums >= 50 limit 10,5
> db.order_log.find({"buy_nums":{$gte:50}}).skip(10).limit(5)
以下示例,相当于mysql的 where buy_nums >= 50 order by buy_nums desc
> db.order_log.find({"buy_nums":{$gte:50}}).sort({"buy_nums":-1})
以下示例,相当于mysql的 where buy_nums >= 50 order by buy_nums asc
> db.order_log.find({"buy_nums":{$gte:50}}).sort({"buy_nums":1})
以下示例,相当于mysql的 select count(*) from table where buy_nums >= 50
> db.order_log.find({"buy_nums":{$gte:50}}).count()
除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。
4、索引
创建title字段的索引
>db.order_log.createIndex({"title":1})
创建title字段和description字段的索引
> db.order_log.createIndex({"title":1,"description":1})
5、备份与恢复
5.1、备份
# mongodump -h dbhost -d dbname -o dbdirectory
-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:log_sys
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个log_sys目录,这个目录里面存放该数据库实例的备份数据。
5.2、恢复
# mongorestore -h dbhost -d dbname datapath
-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要恢复的数据库实例,例如:log_sys
datapath:设置备份数据所在位置,例如:c:\data\dump\log_sys
添加我的个人公众号关注更多分享
点波关注不迷路,老铁双击666