
基础概念html
- MongoDB 元素概念
- databases: 数据库;
- collections:表;(collections组成了databases)
- documents:行;(documents组成了collections)
- MongoDB 没有新建数据库的命令,只要进行 insert 或其它操做,MongoDB 就会自动帮你创建数据库和 collection。当查询一个不存在的 collection 时也不会出错,MongoDB 会认为那是一个空的 collection。
- 一个对象被插入到数据库中时,若是它没有 ID,会自动生成一个 "_id" 字段,为 12 字节(24位)16进制数。
- 固然若是插入文档不带 _id,则系统会帮你自动建立一个,若是本身指定了就用本身指定的。
若是你用 Spring Data MongoDB 依赖请注意java
- 请先看官网最新支持到哪一个版本的依赖:docs.spring.io/spring-data…
- 查看锚点为:What’s new in Spring Data MongoDB 的内容,好比:What’s new in Spring Data MongoDB 1.10,出现这样一句话:Compatible with MongoDB Server 3.4 and the MongoDB Java Driver 3.4
- 目前 201712 支持 MongoDB 3.4
若是你用 Robomongo 客户端请注意linux
Docker 下安装 MongoDBgit
- 先建立一个宿主机之后用来存放数据的目录:mkdir -p /data/docker/mongo/db
- 赋权:chmod 777 -R /data/docker/mongo/db
- 首次运行镜像:docker run --name cloud-mongo -p 27017:27017 -v /data/docker/mongo/db:/data/db -d mongo:3.4
- 进入容器中 mongo shell 交互界面:docker exec -it cloud-mongo mongo adg_mongo_db
- 建立一个用户:
db.createUser(github
{spring
user: "adguser",mongodb
pwd: "adg123456",docker
roles: [ shell
{ role: "dbAdmin", db: "adg_mongo_db" },数据库
{ role: "readWrite", db: "adg_mongo_db" }
]
}
)
- 而后停掉容器:docker stop cloud-mongo
- 而后删除容器:docker rm cloud-mongo
- 从新运行镜像,此次增长须要受权才能访问的配置:docker run -d -p 27017:27017 -v /data/docker/mongo/db:/data/db --restart always --name cloud-mongo mongo:3.4 --auth
- 从新启动服务:docker restart cloud-mongo
- 导出:docker exec -it cloud-mongo mongoexport -h 127.0.0.1 -u 用户名 -p 密码 -d 库名 -c 集合名 -o /data/db/mongodb.json --type json
- 导入:docker exec -it cloud-mongo mongoimport -h 127.0.0.1 -u 用户名 -p 密码 -d 库名 -c 集合名 --file /data/db/mongodb.json --type json
安装环境
MongoDB 安装
- 关闭 SELinux
- 编辑配置文件:vim /etc/selinux/config
- 把 SELINUX=enforcing 改成 SELINUX=disabled
- MongoDB 安装
yum 卸载
- yum remove "mongodb-org-*"
3.4.2 yum 安装
- 新建文件:vim /etc/yum.repos.d/mongodb-org-3.4.repo,文件内容以下:
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
- 若是你要安装 2.6 的版本,可使用下面这个内容:
[mongodb-org-2.6]
name=MongoDB 2.6 Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
- 上面文件新建好以后,输入安装命令:yum install -y mongodb-org,一共有 5 个包,加起来有 100M 左右,国内下载速度不快,须要等等,可能还会出错,若是出错用国内源:mirror.tuna.tsinghua.edu.cn/help/mongod…
- 开放防火墙端口:
- iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
- service iptables save
- service iptables restart
3.6 yum 安装:
- 新建文件:vim /etc/yum.repos.d/mongodb-org-3.6.repo,文件内容以下:
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/testing/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
- 上面文件新建好以后,输入安装命令:yum install -y mongodb-org,一共有 5 个包,加起来有 100M 左右,国内下载速度不快,须要等等,可能还会出错,若是出错用国内源:mirror.tuna.tsinghua.edu.cn/help/mongod…
- 开放防火墙端口:
- iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
- service iptables save
- service iptables restart
3.4.10 tar 绿色安装
- 下载:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz
- 解压到指定目录,并重命名:
tar zxvf mongodb-linux-x86_64-rhel62-3.4.10.gz
mv mongodb-linux-x86_64-rhel62-3.4.10 mongodb
mv mongodb /usr/program
vim ~/.zshrc
export MONGODB_HOME=/usr/program/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
source ~/.zshrc
- 测试是否安装成功:mongod -v,安装成功会获得以下信息:
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] MongoDB starting : pid=31155 port=27017 dbpath=/data/db 64-bit host=youmeek
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] db version v3.4.10
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] git version: 078f28920cb24de0dd479b5ea6c66c644f6326e9
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] allocator: tcmalloc
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] modules: none
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] build environment:
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] distmod: rhel62
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] distarch: x86_64
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] target_arch: x86_64
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] options: { systemLog: { verbosity: 1 } }
2017-12-03T00:08:09.854+0800 D - [initandlisten] User Assertion: 29:Data directory /data/db not found. src/mongo/db/service_context_d.cpp 98
2017-12-03T00:08:09.854+0800 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2017-12-03T00:08:09.854+0800 I NETWORK [initandlisten] shutdown: going to close listening sockets...
2017-12-03T00:08:09.854+0800 I NETWORK [initandlisten] shutdown: going to flush diaglog...
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] now exiting
2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] shutting down with code:100
mkdir -p /usr/program/mongodb/data
mkdir -p /usr/program/mongodb/log
touch /usr/program/mongodb/log/mongodb.log
- 建立配置文件:vim /etc/mongodb.conf,并写入内容:
dbpath=/usr/program/mongodb/data
logpath=/usr/program/mongodb/log/mongodb.log
logappend=true
port=27017
fork=true
- 看下是否已经有 mongo 在运行,若是有就 kill 掉:ps -ef | grep mongo
- 经过配置文件启动:mongod -f /etc/mongodb.conf
- 显示下面信息则表示启动了:
about to fork child process, waiting until server is ready for connections.
forked process: 29167
child process started successfully, parent exiting
- 进入 MongoDB 后台管理 Shell:cd /usr/program/mongodb/bin && ./mongo
- 建立数据库:
use youmeek
- 建立用户,并受权,须要注意的是:dbAdmin 的权限是没有包含 readWrite,因此不少时候要根据需求添加多个权限:
db.createUser(
{
user: "youmeek",
pwd: "youmeek123456",
roles: [
{ role: "dbAdmin", db: "youmeek" },
{ role: "readWrite", db: "youmeek" }
]
}
)
iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
service iptables save
service iptables restart
- 修改配置文件:vim /etc/mongodb.conf,在文件最后面增长一行:
auth=true
- 表示开启用户认证,这样后面要链接 mongo 就必须输入数据库、用户名、密码。
- 而后重启 mongo,开始使用。
其余经常使用命令:
- 检查版本:mongod --version
- 启动:service mongod start
- 中止:service mongod stop
- 重启:service mongod restart
- 添加自启动:chkconfig mongod on
- 进入客户端:mongo,若是有受权用户格式为:mongo 127.0.0.1:27017/admin -u 用户名 -p 用户密码
- 卸载命令:yum erase $(rpm -qa | grep mongodb-org)
- 删除数据库:rm -r /var/lib/mongo
- 删除 log:rm -r /var/log/mongodb
添加受权用户
- 先进入 mongo 客户端 :mongo
- 输入:use admin,而后输入:
db.createUser(
{
user: "gitnavi",
pwd: "123456",
roles: [ { "role" : "dbAdmin", "db" : "youmeek_nav" } ]
}
)
- 修改密码:db.changeUserPassword(用户名, 密码)
- 删除用户: db.removeUser(用户名)
- 内置角色:
- read:容许用户读取指定数据库
- readWrite:容许用户读写指定数据库
- dbAdmin:容许用户在指定数据库中执行管理函数,如索引建立、删除,查看统计或访问system.profile
- userAdmin:容许用户向system.users集合写入,能够找指定数据库里建立、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户全部分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级帐号,超级权限
MongoDB 配置
- 编辑配置文件:vim /etc/mongod.conf,注意:编辑完记得重启 MongoDB 服务
- 默认的数据库目录:/var/lib/mongo
- 默认的日志目录:/var/log/mongodb
- 默认的配置文件内容:
bindIp:127.0.0.1 #注释此行,表示除了本机也能够登录
# 补充这个,表示必须使用带用户名密码的才能请求 mongodb,好比访问 admin 数据库:mongo 192.168.1.121:27017/admin -u 用户名 -p 用户密码
security:
authorization: enabled
经常使用命令
- show dbs,查看已有数据库
- use 数据库名,进入指定数据库,若是这个数据库不存在了也是能够进入的,进入以后 insert 一条语句就会自动建立了。
- db,显示当前用的数据库
- show collections,列出当前数据库的collections(当前数据库下的表)
- show tables,查看数据库中的集
- exit,退出
- show users,查看当前库下的用户
- db.system.users.find().pretty(),查看全部用户
- db.dropAllUsers(),删除全部用户
- db.dropDatebase(),删除当前这个数据库
- db.集名称.find(),查看集中的全部数据,等同于:select * from 表名称
- db.集名称.findOne(),查看集中的一条数据,等同于:select * from 表名称 limit 0,1
- db.集名称.find().limit(10),查看集中的一条数据
- db.集名称.find().sort({name:1}),查询列表,根据字段name排序 #1正序 -1倒序
- db.集名称.find().sort({x:1}).skip(5).limit(10),查询列表,根据字段name排序,等同于 select from foo order by x asc limit 5, 10
- db.集名称.find({x:10}),查询列表,等同于 select from foo where x = 10
- db.集名称.find({x: {$lt:10}}),select from foo where x <= 10
- db.集名称.find({}, {y:true}),select y from foo
- db.集名称.find({"address.city":"gz"}),搜索嵌套文档address中city值为gz的记录
- db.集名称.find({likes:"math"}),搜索数组
- db.集名称.insert({"a":1,"b":2}),插入一个测试数据
- db.集名称.find({name:"lichuang"}),根据索引或字段查找数据
- db.集名称.update({name:"张三"},{$set:{name:"李四"}}),更新数据,等同于:UPDATE 表名 SET name='李四' WHERE name = '张三'
- db.集名称.update({name:"张三"},{$set:{name:"李四"},{upsert:true},{multi:true}}),更新数据,等同于:UPDATE 表名 SET name='李四' WHERE name = '张三'。其中特殊的是 upsert 为 true 的时候,表示若是没有这条数据,则建立一条。multi 表示,全部知足条件的都进行更新,否则默认只找到的第一条更新。
- db.集名称.remove({name:"lichuang"}),删除数据,等同于:DELETE FROM 表名 WHERE name='lichuang'
- db.集名称.drop(),删除这个集合
- db.集名称.getIndexes(),查看集合索引
- db.集名称.dropIndex("name_1"),删除索引
- db.集名称.ensureIndex({title:1}),建立索引
- db.集名称.ensureIndex({titile:1},{name:"indexname"}),建立索引,第二个属性设置索引名称
- db.集名称.ensureIndex({titile:1},{unique:true/false}),建立惟一索引,第二个属性设置为true说明该字段中值不能重复,false能够重复
- db.集名称.ensureIndex({name:1,age:1}),复合索引
- db.集名称.ensureIndex({"address.city":1}),在嵌套文档的字段上建索引
- db.集名称.insert({"article","text"}),全文索引,指定为text类型,每一个数据集合中只容许建立一个全文索引
- db.adminCommand( {setParameter:1, textSearchEnabled:true}),开启全文本索引功能
- 一些符号说明:
$lt ->less then 小于
$lte ->less than and equal 不大于
$lt ->less then 小于
$gt ->greater then 大于
$gte ->greater then and equal 不小于)
$ne ->not equal 不等于
导入 / 导出 / 备份 /还原
- 数据的导出、导入
- 导出:mongoexport -h 127.0.0.1 -u 用户名 -p 密码 -d 库名 -c 集合名 -o /opt/mongodb.json --type json
- 导入:mongoimport -h 127.0.0.1 -u 用户名 -p 密码 -d 库名 -c 集合名 --file /opt/mongodb.json --type json
Java 包
GUI 管理工具