1. 下载安装
MongoDB一个明显的优点就是安装使用比较方便,基本不用做过多的配置。
在Windows下安装完成,只需要简单的配置一下就可以使用。
安装的时候,建议只安装MongoDB服务器就可以了,图形界面安装比较慢,个人感觉现阶段也不是特别好用。
使用mongodb shell也是一个不错的选择,还可以属性一下基本的MongoDB命令。
2. 配置
如上图所示,MongoDB的安装目录下的mongo.conf文件是MongoDB的配置文件。
#数据库路径 dbpath=D:\mongodb\data #日志输出文件路径 logpath=D:\mongodb\mongo.log #错误日志采用追加模式 logappend=true #启用日志文件,默认启用 journal=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false quiet=true #端口号 默认为27017 port=27017
3. 服务
启动MongoDB服务器可以使用--dbpath参数指定数据文件的存储路径。
# 启动服务 mongod # 启动服务,并且指定数据文件存放路径 mongod --dbpath D:\db\mongo # 必须验证,先创建用户 mongod --auth --port 27017 --dbpath D:\db\mongo
在windows中可以将mongod安装为服务,然后可以配置自动启动。
# 安装服务 mongod --config "../mongo.conf" --install --serviceName "mongodb" # 启动服务 net start mongodb #停止服务 net stop mongodb # 删除服务 mongod --remove --serviceName "MongoDB"
4. 连接MongoDB服务器
# 默认host:localhost 端口:27017 mongo # 可以通过-u参数指定用户名 -p参数指定密码 mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
可以通过MongoDB自带的客户端mongo shell来连接MongoDB服务器。
5. 常用命令
# 查看数据库列表 show dbs # 选择数据库 use db-name # 查看数据库中的集合列表 show tables show collections # 创建集合 db.createCollection("teacher") # 删除集合 db.collection-name.drop() # 向数据库的集合中添加数据 db.collection-name.insert() # 查找集合中的数据 db.collection-name.find() # 限制查找数据的数量,可以使用limit函数 db.collection-name.find().limit(num) # 跳过指定的数据,可以使用skip函数 db.collection-name.find().skip(num) # 获得查找的数据的长度,可以使用count函数 db.collection-name.find().count() # 查找集合中的一个数据 db.collection-name.findOne() # 删除集合中的数据 db.collection-name.remove() # 删除name=value的第1条数据 db.collection-name.remove({name:'value'},1) # 更新name=value的第1个数据为update-value db.collection-name.update({name:'value'},{$set:{name:'update-value'}}) # 更新所有name=value的数据为update-value db.collection-name.update({name:'value'}, {$set:{name:'update-value'}}, {multi:true})
6. 通过Java驱动连接
// 使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上 MongoClient mongoClient = MongoClients.create("mongodb://admin:123456@localhost/"); // 使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务的test库上 mongoClient = MongoClients.create("mongodb://admin:123456@localhost/test"); // 默认27017端口 mongoClient = MongoClients.create("mongodb://localhost"); mongoClient = MongoClients.create("mongodb://fred:foobar@localhost"); // mongoClient = MongoClients.create("mongodb://example1.com:27017,example2.com:27017"); mongoClient = MongoClients.create("mongodb://localhost,localhost:27018,localhost:27019"); // 连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器 mongoClient = MongoClients.create("mongodb://host1,host2,host3/?slaveOk=true"); // 直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器 mongoClient = MongoClients.create("mongodb://host1,host2,host3/?connect=direct;slaveOk=true"); // 以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒 mongoClient = MongoClients.create("mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000");
除了直接使用MongoDB驱动的方式,还可以使用spring-data-mongodb的:Repository和MongoTemplate方式,相对来说提供了更稳定的抽象层,更方便使用和维护。
7. 用户与密码
MongoDB默认没有设置用户名密码,需要我们自己设置。简单来说首先设置一个管理所有用户角色的用户admin,然后根据需要为此用户添加其他角色即可
# 提示输入方式,4.2.0版本之后 use admin db.createUser( { user: "myUserAdmin", pwd: passwordPrompt(), roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } ) # 明文方式 use admin db.createUser( { user: "adminUser", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) # 授权auth之前,必须先use到指定数据库 use admin db.auth("myUserAdmin", "abc123") use test db.createUser( { user: "myTester", pwd: passwordPrompt(), roles: [ { role: "readWrite", db: "test" },{ role: "read", db: "reporting" } ] } )
8. 内建角色
角色 | 含义 |
---|---|
root | 只在admin数据库中可用,超级账号,超级权限 |
Read | 允许用户读取指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
readWrite | 允许用户读写指定数据库 |
userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
9. MongoDB优缺点
- 内置GridFS支持大容量的存储
- 海量数据下性能优越
- 可以高效存储二进制大对象
- 支持自动故障恢复
- 自动分片支持云级扩展性,分片简单
- MapReduce支持复杂聚合
- 不支持事务操作
- 占用磁盘空间比较大
- 无法进行关联表查询,不适用于关联关系多的业务
- 复杂聚合操作通过MapReduce实现速度较慢
10. 文档资料
MongoDB下载
MongoDB shell
MongoDB maven
MongoDB Java驱动