1. MongoDB简介
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
1.1 特点
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
1.2 历史
- 2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。
- 2012年05月23日,MongoDB2.1 开发分支发布了! 该版本采用全新架构,包含诸多增强。
- 2012年06月06日,MongoDB 2.0.6 发布,分布式文档数据库。
- 2013年04月23日,MongoDB 2.4.3 发布,此版本包括了一些性能优化,功能增强以及bug修复。
- 2013年08月20日,MongoDB 2.4.6 发布。
- 2013年11月01日,MongoDB 2.4.8 发布。
2. MongoDB安装
- 下载地址:https://www.mongodb.com/try/download/community?tck=docs_server
- 打开安装程序
- 同意使用协议
- 选择自定义安装
- 选择安装位置
- 确认安装信息
- 不安装默认可视化工具
- 开始安装
- 等待安装
- 安装成功
2.1 开启MongoDB服务
- 注意:使用管理员身份运行cmd输入命令。
net start MongoDB
- 浏览器输入 http://127.0.0.1:27017 出现如下界面,则服务启动成功
2.2 关闭MongoDB服务
- 注意:使用管理员身份运行cmd输入命令。
net stop MongoDB
2.3 连接MongoDB服务
- 通过MongoDB安装目录的bin目录下的mongo.exe连接mongodb服务。
3. MongoDB概念
- 在mongodb中是通过数据库、集合、文档的方式来管理数据,下边是mongodb与关系数据库的一些概念对比:
- 一个MongoDB实例可以创建多个数据库。
- 一个数据库可以创建多个集合。
- 一个集合可以包含多个文档。
4. MongoDB命令
4.1 数据库
4.1.1 添加数据库
- 命令描述:存在数据库就切换使用,不存在数据库就创建数据库。
# 命令
use DATABASE_NAME
# 实例
use test
4.1.2 删除数据库
- 命令描述:删除当前正在使用的数据库。
# 命令
db.dropDateabase()
4.1.3 查询数据库
- 命令描述:查看所有数据库。
- 注意:使用该命令时不会显示没有集合的数据库。
# 命令
show dbs
- 命令描述:查看当前使用的数据库。
# 命令
db
4.2 集合
4.2.1 添加集合
# 命令
db.createCollection(name, options)
# 实例
db.createCollection("user")
- options参数描述
4.2.2 删除集合
- 命令描述:根据集合名称删除指定集合。
# 命令
db.collectionName.drop()
# 实例
db.user.drop()
4.2.3 查询集合
# 命令
show collections
# 命令
show tables
4.3 文档
4.3.1 添加文档
- 在MongoDB中文档的类型为json格式,每个文档默认以_id为主键,主键由MongoDB自动生成。
# 命令
db.collectionName.insert(document)
# 实例
db.user.insert({"name":"zhouwei","age":23,"sex":true})
- 命令描述:添加一个文档。
# 命令
db.collectionName.insertOne(document)
# 实例
db.user.insertOne({"name":"zhangsan","age":24,"sex":false})
- 命令描述:添加多个文档。
# 命令
db.coolectionName.insertMany(document)
# 实例
db.user.insertMany([{"name":"jon","age":25,"sex":true},{"name":"tom","age":24,"sex":true}])
4.3.2 删除文档
# 命令
db.collectionName.remove(
query,
{
justOne: <boolean>,
writeConcern: <document>
}
)
# 删除所有文档
db.user.remove({})
# 删除条件文档
db.user.remove({"name":"zhouwei"})
- 参数说明
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
4.3.3 更新文档
# 命令
db.collectionName.update(
query,
update,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
# 替换文档:将整个文档替换为指定文档
db.user.update({"name":"zhouwei"},{"name":"tom","age":23,"sex":true})
# 修改文档:修改指定文档的指定域值,此时匹配文档存在即修改域值,匹配文档不存在即创建
db.user.update({"name":"zhouwei"},{$set:{"age":23,"sex":true}})
- 参数说明
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
4.3.4 查询文档
# 命令
db.collectionName.find(query, projection)
# 查询所有文档
db.user.find()
# 条件查询文档
db.user.find({"name":"zhouwei"})
- 参数说明
- query :可选,使用查询操作符指定查询条件。
- projection :可选,使用投影操作符指定返回的键。
4.4 用户
4.4.1 添加用户
# 命令
db.createUser(
{
user: "<name>",
pwd: "<cleartext password>",
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
)
# 实例
db.createUser({"user":"root","pwd":"root","roles":[{"role":"dbOwner","db":"test"}]})
- 参数说明
- user:指定用户账号
- pwd:指定用户密码
- roles:指定用户的角色
- 内置角色
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase- 超级用户角色:root
4.4.2 删除用户
# 命令
db.dropUser(username)
# 实例
db.dropUser("root")
4.4.3 修改用户
# 命令
db.updateUser(
"<username>",
{
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: "<cleartext password>"
}
)
# 实例
db.updateUser("root",{"roles":[{"role":"read",db:"test"}],"pwd":"123456"})
4.4.4 查询用户
- 命令描述:查询当前数据库下所有用户。
# 命令
show users
4.4.5 修改密码
# 命令
db.changeUserPassword("userName","newPasswd")
# 实例
db.changeUserPassword("root","root")
5. Java连接服务
- 依赖坐标
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.2</version>
</dependency>
5.1 连接服务
@Test
public void test01()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 打印信息
System.out.println("mongoClient = " + mongoClient);
// 关闭连接
mongoClient.close();
}
5.2 操作数据库
@Test
public void test02()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 打印数据库对象地址
System.out.println("testDB = " + testDB);
// 删除数据库
testDB.drop();
// 关闭连接
mongoClient.close();
}
5.3 操作集合
@Test
public void test03()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 创建集合
testDB.createCollection("student");
// 获取集合
MongoCollection<Document> studentCollection = testDB.getCollection("student");
// 打印集合
System.out.println("studentCollection = " + studentCollection);
// 删除集合
studentCollection.drop();
// 关闭连接
mongoClient.close();
}
5.4 操作文档
5.4.1 添加文档
@Test
public void test04()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 获取集合
MongoCollection<Document> userCollection = testDB.getCollection("user");
// 添加单个文档
Document document = new Document();
document.append("name","zhouwei");
document.append("age", 23);
document.append("sex", true);
userCollection.insertOne(document);
// 添加多个文档
List<Document> documents = new ArrayList<>();
documents.add(new Document("name", "张三"));
documents.add(new Document("name", "李四"));
userCollection.insertMany(documents);
// 关闭连接
mongoClient.close();
}
5.4.2 删除文档
@Test
public void test05()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 获取集合
MongoCollection<Document> userCollection = testDB.getCollection("user");
// 删除符合条件的第一个文档
DeleteResult deleteResult1 = userCollection.deleteOne(Filters.eq("name", "张三"));
System.out.println("deleteResult = " + deleteResult1);
// 删除所有符合条件的文档
DeleteResult deleteResult2 = userCollection.deleteMany(Filters.eq("name", "zhouwei"));
System.out.println("deleteResult2 = " + deleteResult2);
// 关闭连接
mongoClient.close();
}
5.4.3 更新文档
@Test
public void test06()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 获取集合
MongoCollection<Document> userCollection = testDB.getCollection("user");
// 文档替换
UpdateResult updateResult1 = userCollection.replaceOne(Filters.eq("name", "zhouwei"), new Document("name", "jack"));
System.out.println("updateResult1 = " + updateResult1);
// 文档修改
UpdateResult updateResult3 = userCollection.updateOne(Filters.eq("name", "baby"), new Document("$set", new Document("name", "tom")));
System.out.println("updateResult3 = " + updateResult3);
// 关闭连接
mongoClient.close();
}
5.4.4 查询文档
5.4.4.1 查询所有
@Test
public void test07()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 获取集合
MongoCollection<Document> userCollection = testDB.getCollection("user");
// 查询文档
FindIterable<Document> documents = userCollection.find();
// 遍历结果
for (Document document : documents)
{
System.out.println("document = " + document);
}
// 关闭连接
mongoClient.close();
}
5.4.4.2 条件查询
@Test
public void test08()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 获取集合
MongoCollection<Document> userCollection = testDB.getCollection("user");
// 组装查询条件
BasicDBObject query = new BasicDBObject();
query.put("name", "jack");
// 查询文档
FindIterable<Document> documents = userCollection.find(query);
// 遍历结果
for (Document document : documents)
{
System.out.println("document = " + document);
}
// 关闭连接
mongoClient.close();
}
5.4.4.3 分页查询
- skip():指定跳过多少条记录。
- limit():指定查询几条记录。
@Test
public void test09()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 获取集合
MongoCollection<Document> userCollection = testDB.getCollection("user");
// 分页查询
FindIterable<Document> documents = userCollection.find().skip(1).limit(2);
// 遍历结果
for (Document document : documents)
{
System.out.println("document = " + document);
}
// 关闭连接
mongoClient.close();
}
5.4.4.4 查询个数
@Test
public void test10()
{
// 获取连接
MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
// 获取数据库
MongoDatabase testDB = mongoClient.getDatabase("test");
// 获取集合
MongoCollection<Document> userCollection = testDB.getCollection("user");
// 查询个数
long count = userCollection.countDocuments();
// 打印结果
System.out.println("count = " + count);
// 关闭连接
mongoClient.close();
}
6. 可视化工具
这里我们采用Studio 3T 2020.8.0可视化工具进行安装。
6.1 软件安装
-
下载地址:https://studio3t.com/
-
进入安装界面
- 选择安装位置
- 等待安装结束
- 程序安装完成
6.2 软件启动
- 同意使用协议
- 使用默认密码
- 选择白色主题
- 进入工作界面
6.3 连接服务
- 新建连接
- 填写连接信息,进行连接测试
- 测试连接成功
- 开始连接服务
- 显示连接数据库