MongoDB使用笔记

1. MongoDB简介

​ MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB使用笔记_第1张图片

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

MongoDB使用笔记_第2张图片

  • 打开安装程序

MongoDB使用笔记_第3张图片

  • 同意使用协议

MongoDB使用笔记_第4张图片

  • 选择自定义安装

MongoDB使用笔记_第5张图片

  • 选择安装位置

MongoDB使用笔记_第6张图片

  • 确认安装信息

MongoDB使用笔记_第7张图片

  • 不安装默认可视化工具

MongoDB使用笔记_第8张图片

  • 开始安装

MongoDB使用笔记_第9张图片

  • 等待安装

MongoDB使用笔记_第10张图片

  • 安装成功

MongoDB使用笔记_第11张图片

2.1 开启MongoDB服务

  • 注意:使用管理员身份运行cmd输入命令
net start MongoDB

在这里插入图片描述

  • 浏览器输入 http://127.0.0.1:27017 出现如下界面,则服务启动成功

MongoDB使用笔记_第12张图片

2.2 关闭MongoDB服务

  • 注意:使用管理员身份运行cmd输入命令
net stop MongoDB

在这里插入图片描述

2.3 连接MongoDB服务

  • 通过MongoDB安装目录的bin目录下的mongo.exe连接mongodb服务。

MongoDB使用笔记_第13张图片

MongoDB使用笔记_第14张图片

3. MongoDB概念

  • 在mongodb中是通过数据库、集合、文档的方式来管理数据,下边是mongodb与关系数据库的一些概念对比:

MongoDB使用笔记_第15张图片

  • 一个MongoDB实例可以创建多个数据库。
  • 一个数据库可以创建多个集合。
  • 一个集合可以包含多个文档。

MongoDB使用笔记_第16张图片

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参数描述

MongoDB使用笔记_第17张图片

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}])

MongoDB使用笔记_第18张图片

4.3.2 删除文档

# 命令
db.collectionName.remove(
   query,
   {
     justOne: ,
     writeConcern: 
   }
)

# 删除所有文档
db.user.remove({})

# 删除条件文档
db.user.remove({"name":"zhouwei"})

在这里插入图片描述

在这里插入图片描述

  • 参数说明
  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

4.3.3 更新文档

# 命令
db.collectionName.update(
   query,
   update,
   {
     upsert: ,
     multi: ,
     writeConcern: 
   }
)

# 替换文档:将整个文档替换为指定文档
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: "",
    	pwd: "",
    	roles: [
    		{ role: "", db: "" } | "",
    		...
    	]
    }
)

# 实例
db.createUser({"user":"root","pwd":"root","roles":[{"role":"dbOwner","db":"test"}]})

MongoDB使用笔记_第19张图片

  • 参数说明
  • user:指定用户账号
  • pwd:指定用户密码
  • roles:指定用户的角色
  • 内置角色
  1. 数据库用户角色:read、readWrite
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
  4. 备份恢复角色:backup、restore
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
    dbAdminAnyDatabase
  6. 超级用户角色:root

4.4.2 删除用户

# 命令
db.dropUser(username)

# 实例
db.dropUser("root")

在这里插入图片描述

4.4.3 修改用户

# 命令
db.updateUser(
    "",
    {
    	roles : [
    		{ role: "", db: "" } | "",
    			...
    	],
    	pwd: ""
    }
)

# 实例
db.updateUser("root",{"roles":[{"role":"read",db:"test"}],"pwd":"123456"})

在这里插入图片描述

4.4.4 查询用户

  • 命令描述:查询当前数据库下所有用户。
# 命令
show users

MongoDB使用笔记_第20张图片

4.4.5 修改密码

# 命令
db.changeUserPassword("userName","newPasswd")

# 实例
db.changeUserPassword("root","root")

在这里插入图片描述

5. Java连接服务

  • 依赖坐标
<dependency>
    <groupId>org.mongodbgroupId>
    <artifactId>mongo-java-driverartifactId>
    <version>3.8.2version>
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();
}

MongoDB使用笔记_第21张图片

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/

  • 进入安装界面

MongoDB使用笔记_第22张图片

MongoDB使用笔记_第23张图片

  • 选择安装位置

MongoDB使用笔记_第24张图片

  • 等待安装结束

MongoDB使用笔记_第25张图片

  • 程序安装完成

MongoDB使用笔记_第26张图片

6.2 软件启动

  • 同意使用协议

MongoDB使用笔记_第27张图片

  • 使用默认密码

MongoDB使用笔记_第28张图片

  • 选择白色主题

MongoDB使用笔记_第29张图片

  • 进入工作界面

MongoDB使用笔记_第30张图片

6.3 连接服务

  • 新建连接

MongoDB使用笔记_第31张图片

MongoDB使用笔记_第32张图片

  • 填写连接信息,进行连接测试

MongoDB使用笔记_第33张图片

  • 测试连接成功

MongoDB使用笔记_第34张图片

  • 开始连接服务

MongoDB使用笔记_第35张图片

  • 显示连接数据库

MongoDB使用笔记_第36张图片

你可能感兴趣的:(数据库)