MongoDB学习
系列文章目录
前言
本文我们要讲述:
MongoDB
在下攸攸太上,是银河系绝地武士赏金猎人。
一、MongoDB介绍
1. 非关系型数据库介绍
非关系型数据库(NoSQL)是指与传统的关系型数据库(如MySQL、Oracle等)不同的数据库系统,它们以非结构化或半结构化的数据存储方式来满足大规模数据存储和处理的需求。非关系型数据库通常以键值对、文档型、列存储和图形数据库等形式存储数据。
2. 非关系型数据库分类
键值存储数据库:数据存储为键值对的形式,如Redis、Memcached等。
文档型数据库:数据以文档的形式存储,通常使用JSON或BSON格式,如MongoDB、CouchDB等。
列存储数据库:数据以列族的形式存储,适合于数据仓库和分析场景,如HBase、Cassandra等。
图形数据库:用于存储图结构数据,适合于处理关系复杂的数据,如Neo4j、ArangoDB等。
MongoDB 是一种流行的文档型数据库,它使用JSON格式的文档来存储数据。
3. MongoDB介绍
MongoDB是一种开源的、面向文档的数据库管理系统(DBMS),采用文档型的存储方式。它以JSON格式的文档来存储数据,并使用灵活的数据模型来处理非结构化、半结构化和结构化数据。MongoDB由10gen公司(现在的MongoDB公司)在2009年推出,成为非关系型数据库领域的领先者之一。
4. MongoDB的优势
灵活的数据模型:MongoDB采用文档型存储方式,可以存储非结构化、半结构化和结构化数据,很适合于处理动态变化的数据模型。
横向扩展性:MongoDB支持分布式部署和自动分片,可以轻松地实现数据的横向扩展,承担大规模数据存储和处理的需求。
高性能:MongoDB采用内存映射文件的方式进行数据存储,可以提供快速的读写性能和高并发处理能力。
丰富的查询功能:MongoDB支持复杂的查询操作,包括范围查询、正则表达式查询、文本搜索等,提供了丰富的查询功能。
容易部署和管理:MongoDB提供了易于部署和管理的特性,可以快速搭建和维护数据库系统。
5. 常用名字对比
Mongo | MySQL | |
---|---|---|
数据库 | database | database |
表 | collection | table |
列 | field | column |
行 | document | row |
主键 | primary key | primary key |
索引 | index | index |
事务 | multi-document transactions | transactions |
二、MongoDB安装
1. 拉取镜像
docker pull mongo:4.4.18
2. 创建数据挂载目录
创建/usr/local/docker/mongodb目录,分别执行如下命令
mkdir -p /usr/local/docker/mongodb/data
cd /usr/local/docker/mongodb
chmod 777 data
3. 启动容器
docker run -d \
--name mongodb \
--privileged \
-p 27017:27017 \
-v /usr/local/docker/mongodb/data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
mongo:4.4.18 mongod --auth
4. 基本命令
# 1.进入容器
docker exec -it mongodb /bin/bash
# 2.查看版本
mongo --version
# 3.以root用户登录mongo,-p是密码,--port是端口号,--authenticationDatabase是验证权限的数据库
mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"
# 4.展示所有的数据库
show dbs
# 5.切换到dz14b数据库
use dz14b
# 6.创建一个用户,用户名是user01,密码是123456,角色是读写角色,作用在dz14b数据库上
db.createUser({user:"user01", pwd:"123456",roles: [{role:"readWrite", db:"dz14b"}]})
# 7.查看所有的用户数据
show users
# 8.退出mongodb数据库
exit
# 9.退出mongodb容器
exit
# 10.再次进入容器,以mongo命令进入,进入到dz14b数据库中
docker exec -it mongodb mongo dz14b
# 11.查看当前在那个数据库
db
# 12.查看数据库,发现没有其他数据库,我们已经再dz14b了,所以查询不到其他数据库
show dbs
# 13.授权
db.auth("user01", "123456")
# 14.查看数据库,发现没有,授权影响不到用户的作用范围
show dbs
# 15.因为没有权限报错了
show users
# 16.向dz(dz自定义的名字)集合插入了一个文档,数据是inser方法的参数。对照sql理解:向dz表插入一条记录
db.dz.insert({name:"zhangsan"})
# 17.查询dz集合下所有的数据
db.dz.find()
第1-3步:
第4-7步:
第8-17步:
三、Navicat连接
1. 创建数据库连接
2. insert新建
db.dz.insert({name:"lisi", age:20});
db.dz.save({name:"wangwu", age:25});
db.dz.save({name:"zhangsan", age:25});
db.dz.insert({_id:ObjectId("63e4c8bdd20e7cc75a36a700"),name:"zhangsan1",age:20})
db.dz.save({_id:ObjectId("63e4c8bdd20e7cc75a36a700"),name:"zhangsan1",age:20})
insert只是新增,当_id重复时,会出错,save也是新增,当_id重复时,会做更改操作
3. find查询
db.dz.find({age : 25} )
db.dz.find({age : {$gt : 20}})
db.dz.find({age:{$gt:20},name:'zhangsan'})
4. delete删除
db.dz.deleteOne({age:20})
db.dz.deleteMany({age:20})
deleteOne:删除一项
deleteMany:删除所有符合项
5. update修改
db.dz.updateOne(
{age:25},
{$set:{age:20}}
)
db.dz.updateMany(
{age:25},
{$set:{age:20}}
)
6. 其他操作
# 查看所有数据库
show dbs
# 应用到指定数据库
use databasename
# 查看数据库下的集合
show collections
# 创建集合
db.createCollection("test_collection")
# 删除集合,test_collection是集合的名字
db.test_collection.drop()
四、MongoDB整合SpringBoot
目录结构:博主打错了,名字不要写Mango,写Mongo
1. 创建Maven项目
博主打错了,名字不要写Mango,写Mongo
2. 添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.13</version>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
<jwt.version>0.7.0</jwt.version>
<fastjson.version>1.2.60</fastjson.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--json-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
3. 添加配置
spring:
data:
mongodb:
username: user01
password: '123456'
port: 27017
host: 192.168.108.186
database: dz14b
可以试试第二种配置方法
spring:
data:
mongodb:
uri: mongodb://user01:123456@192.168.108.186:27017/dz12b
4. 编写User实体类
package com.jjy.entry;
import lombok.Data;
import org.springframework.data.annotation.Id;
@Data
public class User {
@Id
private String id;
private String name;
private String password;
}
5. 编写IUserDao文件
package com.jjy.dao;
import com.jjy.entry.User;
import java.util.List;
public interface IUserDao {
/**
* 新增
*
* @param user 目标对象
*/
void insert(User user);
/**
* 删除
*
* @param id 对象主键
*/
void delete(String id);
/**
* 修改
*
* @param user 目标对象
*/
void update(User user);
/**
* 通过主键查询
*
* @param id 主键
* @return user对象
*/
User findById(String id);
/**
* 查询
*
* @param user 条件对象
* @return user集合
*/
List<User> query(User user);
}
6. 编写UserDaoImpl文件
package com.jjy.dao.impl;
import com.jjy.dao.IUserDao;
import com.jjy.entry.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class UserDaoImpl implements IUserDao {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public void insert(User user) {
mongoTemplate.insert(user);
}
@Override
public User findById(String id) {
return mongoTemplate.findById(id, User.class);
}
// @Override
public void delete1(String id) {
User user = findById(id);
if (user != null) {
mongoTemplate.remove(user);
} else {
System.out.println("没有找到要删除的数据!");
}
}
@Override
public void delete(String id) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
mongoTemplate.remove(query, User.class);
}
@Override
public void update(User user) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(user.getId()));
Update update = new Update();
update.set("name", user.getName());
update.set("password", user.getPassword());
mongoTemplate.updateMulti(query, update, User.class);
}
@Override
public List<User> query(User user) {
Query query = new Query();
if(user.getId() != null){
query.addCriteria(Criteria.where("_id").is(user.getId()));
}
if(user.getName() != null){
query.addCriteria(Criteria.where("name").is(user.getName()));
}
if(user.getPassword() != null){
query.addCriteria(Criteria.where("password").is(user.getPassword()));
}
return mongoTemplate.find(query, User.class);
}
}
7. 编写SpringBootMain启动类
package com.jjy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootMain {
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class);
}
}
8. 编写MongoDbTest测试类
package com.jjy.test;
import com.jjy.SpringBootMain;
import com.jjy.dao.IUserDao;
import com.jjy.entry.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@Slf4j
@SpringBootTest(classes = SpringBootMain.class)
@SuppressWarnings("all")
public class MongoDbTest {
@Autowired
private IUserDao userDao;
@Test
public void testInsert() {
User user = new User();
user.setPassword("123");
user.setName("zhangsan");
userDao.insert(user);
}
@Test
public void testFindById() {
User byId = userDao.findById("661794efd775ee4bd7a6d069");
System.out.println(byId);
}
@Test
public void testDelete() {
userDao.delete("6617970547fbc57ef66a962f");
}
@Test
public void testUpdate() {
User user = new User();
user.setId("661797ee479a0c02f0dd9212");
user.setPassword("123456");
user.setName("lisi");
userDao.update(user);
}
@Test
public void testQuery() {
User user = new User();
// user.setId("661797ee479a0c02f0dd9212");
user.setPassword("123");
// user.setName("lisi");
System.out.println(userDao.query(user));
}
}
9. 运行测试类
数据库内User表(刷新出现):
总结
本文讲述了:
MongoDB:非关系型数据库
本人攸攸太上,我的左手寄宿着被戒指压制住的黑暗力量。
啊!我的右手好痛!!!
“吾乃漆黑之皇者,如今从这小子的右手中解放出来,哈哈哈哈哈哈哈哈哈哈!!!”
原文地址:https://blog.csdn.net/howwickhappy/article/details/142543320
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!