MongoDB 基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案,它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组
1、安装MongoDB
我们日常使用更多是使用linux的服务器,所以接下来让我们看一下linux安装MongoDB的方法
# 下载MongoDB
在浏览器里输入https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz直接下载然后上传到虚拟机上
# 解压 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
# 将mongodb-linux-x86_64-3.0.6重命名为mongodb
# 将mongodb移动到指定目录mv mongodb/ /usr/local/
2、启动MongoDB
启动MongoDB之前需要先创建一个文件存储目录,默认会去使用/data/db这个目录,mkdir /data/db,创建好存储目录,使用mongod来启动MongoDB,如果指定的目录不是/data/db这个目录,则需要使用-dbpath 来声明目录位置,mongod -dbpath=/opt/data/,使用上面的命令以后我们会发现,我们的MongoDB确实是启动了,但是只是在前台启动,我们要做什么操作都会使它停掉,所以我们就需要使用-fork或者nohup来让MongDB进入到后台运行,在使用nohup或者-fork启动MongoDB的时候需要先指定log文件的路径,注意这里需要指定到具体的log文件名,而不是目录,创建数据库文件夹与日志文件的命令是:
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
日志的路径我们已经创建好了,接下来让我们启动MongoDB服务吧,启动命令是在bin目录下执行./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork ,这个是不需要密码的,如果想使用密码,要加上--auth,启动成功会出现下面红框里的提示,如下图:
可以看到mongodb启动成功,./mongod --help,可以看到mongodb的主要参数有:
************************************* 基本配置*********************************************
--quiet | # 安静输出 |
--port arg | # 指定服务端口号,默认端口27017 |
--bind_ip arg | # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP |
--logpath arg | # 日志文件路径 |
--logappend | # 使用追加的方式写日志 |
--pidfilepath arg | # PID File 的完整路径,如果没有设置,则没有PID文件 |
--keyFile arg | # 集群的私钥的完整路径,只对于Replica Set 架构有效 |
--unixSocketPrefix arg | # UNIX域套接字替代目录,(默认为 /tmp) |
--fork | # 在后台运行 |
--auth | # 是否需要验证权限登录(用户名和密码) |
--cpu | # 定期显示CPU的CPU利用率和iowait |
--dbpath arg | # 指定数据库路径 |
--diaglog arg | # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads |
--directoryperdb | # 设置每个数据库将被保存在一个单独的目录 |
--journal | # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里 |
--journalOptions arg | # 启用日志诊断选项 |
--ipv6 | # 启用IPv6选项 |
--jsonp | # 允许JSONP形式通过HTTP访问(有安全影响) |
--maxConns arg | # 最大同时连接数 默认2000 |
--noauth | # 不启用验证 |
--nohttpinterface | # 关闭http接口,默认关闭27018端口访问 |
--noprealloc | # 禁用数据文件预分配(往往影响性能) |
--noscripting | # 禁用脚本引擎 |
--notablescan | # 不允许表扫描 |
--nounixsocket | # 禁用Unix套接字监听 |
--nssize arg (=16) | # 设置信数据库.ns文件大小(MB) |
--objcheck | # 在收到客户数据,检查的有效性, |
--profile arg | # 档案参数 0=off 1=slow, 2=all |
--quota | # 限制每个数据库的文件数,设置默认为8 |
--quotaFiles arg | # number of files allower per db, requires –quota |
--rest | # 开启简单的rest API |
--repair | # 修复所有数据库run repair on all dbs |
--repairpath arg | # 修复库生成的文件的目录,默认为目录名称dbpath |
--slowms arg (=100) | # value of slow for profile and console log |
--smallfiles | # 使用较小的默认文件 |
--syncdelay arg (=60) | # 数据写入磁盘的时间秒数(0=never,不推荐) |
--sysinfo | # 打印一些诊断系统信息 |
--upgrade | # 如果需要升级数据库 |
********************************Replicaton**************************************************
--fastsync | # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步 |
--autoresync | # 如果从库与主库同步数据差得多,自动重新同步, |
--oplogSize arg | # 设置oplog的大小(MB) |
********************************主/从参数****************************************************
--master | # 主库模式 |
--slave | # 从库模式 |
--source arg | # 从库 端口号 |
--only arg | # 指定单一的数据库复制 |
--slavedelay arg | # 设置从库同步主库的延迟时间 |
*********************************Replica set(副本集)选项************************************
--replSet arg |
# 设置副本集名称 |
********************************Sharding(分片)选项******************************************
--configsvr | # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb |
--shardsvr | # 声明这是一个集群的分片,默认端口27018 |
--noMoveParanoia | # 关闭偏执为moveChunk数据保存 |
3、连接MongoDB
前面我们启动了MongoDB,接下来让我们尝试一下连接MongoDB,连接MongoDB使用bin目录下的mongo工具
通过shell连接MongoDB服务:
4、使用工具连接MongDB
下载NoSQL Manager for MongoDB这个客户端,双击就可以安装,直接输入虚拟机ip就行,别的不用管,通过shell连接 MongoDB 服务:
第一步右键Collections,选择Create new collection,弹出的对话框里输入一个集合的名字,点击OK,然后右键besttest,选择Shell
增
可以多次运行,生成的id是自增的
查
db.besttest.find();查找全部的
db.besttest.find().pretty();格式化输出
db.besttest.find({'age':27}).pretty();精确查询
db.besttest.find({'age':{$lte:18}}).pretty();小于等于18查询
改
db.besttest.update({'age':27},{$set:{'age':25}});如果有多条27岁的只能修改一条
db.besttest.update({'age':18},{$set:{'age':40}},{multi:true});全部修改为40岁
db.besttest.save();怕修改失败save一下
db.besttest.find({'age':25}).pretty();改完查询一下
删
首先查看所有数据库:
接下来我们切换到数据库ssj:
执行删除命令:
在查看所有数据库,ssj的数据库没有了:
db.besttest.remove({'age':40});删除所有年龄是40岁的
5、MongoDB常用命令
# 查看数据库
# 现在我们创建一个新库
这时使用show dbs查询时发现我们新建的库没有查询出来,这是为什么呢?让我们先来写一些数据进去
这样就可以看到我们刚刚创建的库了,另外需要注意的一点是MongoDB中默认的数据库为test,如果你没有创建新的数据库,集合将存放在test 数据库中,回到NoSQL Manager for MongoDB中刷新Databases可以看到刚创建的数据库ssj