1. 下载安装

MongoDB一个明显的优点就是安装使用比较方便,基本不用做过多的配置。


mongodb安装与基本使用_mongodb

在Windows下安装完成,只需要简单的配置一下就可以使用。

安装的时候,建议只安装MongoDB服务器就可以了,图形界面安装比较慢,个人感觉现阶段也不是特别好用。

使用mongodb shell也是一个不错的选择,还可以属性一下基本的MongoDB命令。

2. 配置

mongodb安装与基本使用_mongodb_02如上图所示,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优缺点

  1. 内置GridFS支持大容量的存储
  2. 海量数据下性能优越
  3. 可以高效存储二进制大对象
  4. 支持自动故障恢复
  5. 自动分片支持云级扩展性,分片简单
  6. MapReduce支持复杂聚合
  7. 不支持事务操作
  8. 占用磁盘空间比较大
  9. 无法进行关联表查询,不适用于关联关系多的业务
  10. 复杂聚合操作通过MapReduce实现速度较慢

10. 文档资料

MongoDB下载

MongoDB shell

MongoDB maven

MongoDB Java驱动