数据库MongoDB

MongoDB记录是一个文档,由一个字段和值对组成的数据结构,文档类似于JSON对象。
一个文档认为就是一个对象,字段的数据类型是字符型,值除了使用基本类型外,还可以包括其他文档,普通数组和文档数组。
在这里插入图片描述
在这里插入图片描述

一、下载安装、解压、创建存放数据文件的目录data/db

①、window安装
在这里插入图片描述
在这里插入图片描述

启动方式:

  • 命令行参数方式启动,bin目录下打开命令提示符:mongod --dbpath=…\data\db 默认端口27017,可以通过–port来指定端口
  • 配置文件方式启动,在解压目录中创建config文件夹,该文件夹中新建配置文件mongod.conf
    在这里插入图片描述

②、Linux中通过docker安装

docker pull mongo:latest# 创建和启动容器
docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo# 查看
docker ps# 进入容器
docker exec -it mymongo /bin/bash# 使用客户端进行操作
mongo# 查询当前mogodb中有哪些数据库
show dbs

=========================================================================

命令行进行连接:
在这里插入图片描述

图形化界面进行连接:
在这里插入图片描述

Linux系统中进行安装、启动、连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

==============================================================

基本常用命令

在这里插入图片描述

创建一个集合(table)

db.createCollection("collName")# 得到指定名称的集合
db.getCollection("user")

向comment集合中插入一条数据并查询

db.User.save({name:'jordan',age:23,sex:true})db.User.find() #查询所有db.User.find({name:"jordan"}) #查询指定名字的数据db.User.find({age:23},{'name':1,'age':1}) #查询age=23的,只显示name/age字段db.User.createIndex({"name":1}) # 添加索引

如果comment不存在,则会隐式创建
数字默认是double类型,如果存整型,需要函数NumberInt()
插入的数据没有指定_id,会自动生成主键值
如果某字段没有值,可以赋值为null,或不写该字段

db.comment.insert({"articleid":"100000","content":"今天天气好晴朗,处处好风光","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null}
)

批量插入
如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。
可以使用try{…}catch(e){print(e);}

db.comment insertMany([{"_id":"1","articleid":"100001","content":"天气晴朗","userid":"10002","nickname":"jordan","createdatetime":new Date("2008-08-01"),"likenum":NumberInt(1000),"state":"1"},{},{}]
)

投影查询(只查询部分字段)

db.comment.find({userid:"1003"},{userid:1,nickname:1}
)

排序

#1为升序排列,-1为降序排列
db.User.find().sort({age:1}) 

文档更新

# 覆盖修改,修改_id为1,点赞量为1001
db.comment.update({_id:"1"},{likenum:NumberInt(1001)}) # 局部修改,修改_id为2,浏览量为889 
db.comment.update({_id:2},{$set:{likenum:NumberInt(889)}})# 批量修改,更新所有用户为1003的用户的昵称
db.comment.update({userid:"1003"},{$set:{nickname:"jordan"}}) # 默认只修改一条数据
db.comment.update({userid:"1003"},{$set:{nickname:"jordan"}},{multi:true}) # 修改所有符合条件的数据# 列值增长的修改,对原有值的基础上进行增加或减少,可以使用$inc运算符
# 对3号数据的点赞数,每次递增1
db.comment.update({_id:"3"},{$inc:{linknum:NumberInt(1)}})

分页查询

db.comment.find().limit(3) # 查询3条记录,默认值20
db.comment.find().skip(3) # 跳过3条记录,默认值0# 每页2个
db.comment.find().skip(0).limit(2) # 第一页
db.comment.find().skip(2).limit(2) # 第二页
db.comment.find().skip(4).limit(2) # 第三页

在这里插入图片描述

正则表达式实现的模糊查询

# 内容评论包含开水打的所有文档
db.comment.find({content:/开水/})# 以专家开头的评论内容
db.comment.find({content:/^专家/})

比较查询

# 评论点赞数大于700
db.comment.find({linenum:{$gt:NumberInt(700)}})

包含查询

# 查询评论集合中userid字段包含1003或1004的文档
db.comment.find({userid:{$in:["1003","1004"]}})# 不好含使用$nin操作符 查询集合中suerid字段不包含1003和1004的文档
db.comment.find({userid:{$nin:["1003","1004"]}})

条件连接查询

# 查询评论集合中likenum大于等于700并且小于2000的文档 $and:[{},{}]
db.comment.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})# 或  $or:[{},{}]  查询评论集合中userid为1003,或者点赞数小于1000的文档记录
db.comment.find({$or:[{userid:"1003"},{likenum:{$lt:1000}}]})

删除操作

db.User.remove(id) # 按照指定id移除db.User.remove() #移除所有

总结:
在这里插入图片描述

====================================================================
在这里插入图片描述

创建索引

# 单字段索引,对userid字段建立索引
db.comment.createIndex({userid:1})# 复合字段索引,对userid和nickname同时建立复合索引
db.comment.createIndex({userid:1,nickname:-1})

移除索引

# 删除userid字段上的升序索引
db.comment.dropIndex({userid:1})# 删除所有索引(_id的字段是无法删除的,只能删除非_id字段的索引)
db.comment.dropIndexes()

执行计划

# 根据userid查询数据的情况,建立的索引是否有效,效果如何
db.comment.find({userid:"1003"}).explain()

=================================================

MongoDB集群和安全

副本集的创建

一、创建主节点

二、创建副本节点

三、创建仲裁节点

四、初始化配置副本集和主节点

五、查看副本集的配置内容和副本集的状态

六、添加副本节点

七、添加冲裁节点

八、数据的读写

故障测试

=========================================================

SpringBoot集成mongodb

spring-data-mongodb提供了两种方式访问mongodb
①、MongoTemplate
②、MongoRepository 不够灵活,所以MongoTemplate弥补了不足

一、添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

二、application.properties配置文件添加连接信息

spring.data.mongodb.uri=mongodb://47.93.118.241:27017/test

三、创建对应的实体类

@Data
@Document("User") //指定对应的mongodb对应的
public class User{@Idprivate String id;private String name;private Integer age;private String email;private String createData;
}

四、测试

通过MongoTemplate实现对MongoDB的CRUD

@SpringBootTest
public class DemomogoApplicationTests{@Autowiredprivate MongoTemplate mongoTemplate;//添加操作@Testpublic void create(){User user = new User();user.setAge(20);user.setName("jordan");user.setEmail("jordan@qq.com");User user = mongoTemplate.insert(user);//返回添加后的数据}//查询所有记录@Testpublic void findAll(){List<User> all = mongoTemplate.findAll(User.class);System.out.println(all);}//根据id查询@Testpublic void findById(){User user = mongoTemplate.findById("id",User.class);}//条件查询@Testpublic void findUserList(){Query query = new Query(Criteria.where("name").is("jordan").and("age").is(23));mongoTemplate.find(query,User.class);}//模糊查询@Testpublic void findLikeUserList(){String name = "jor";String regex = String.format("%s%s%s","^.*",name,".*$");Pattern pattern = Pattern.compile(regex.Pattern.CASE_INSENSTIVE);Query query = new Query(Criteria.where("name").regex(pattern));mongoTemplate.find(query,User.class);}//分页查询@Testpublic void findPageUserList(){int pageNo = 1; //当前页int pageSize = 3; //每页显示数String name = "jor";String regex = String.format("%s%s%s","^.*",name,".*$");Pattern pattern = Pattern.compile(regex.Pattern.CASE_INSENSTIVE);Query query = new Query(Criteria.where("name").regex(pattern));//分页构建//查询记录数(当前页=(pageNo - 1)*pageSize)long count = mongoTemplate.count(query,User.class);List<User> users = mongoTemplate.find(query,skip((pageNo - 1)*pageSize).limit(pageSize),User.class);}//修改操作@Testpublic void updateUser(){//1.根据id查询User user = mongoTemplate.findById("id",User.class);//2.设置修改值user.setName("kobe");user.setAge(24);user.setEmail("kobe@qq.com");//3.调用方式实现修改Query query = new Query(Criteria.where("_id").is(user.getId()));Update update = new Update();update.set("name",user.getName());update.set("age",user.getAge());update.set("email",user.getEmail());UpdateResult upsert = mongoTemplate.upsert(query,update,User.class);long modifiedCount = upsert.getModifiedCount();//影响的行数}//删除操作@Testpublic void deleteUser(){Query query = new Query(Criteria.where("_id").is("id获取"));DeleteResult remove = mongoTemplate.remove(query,User.class);long deletedCount = remove.getDeleteCount();System.out.println(deletedCount);}
}

通过MongoRepository实现对MongoDB的CRUD

SpringData提供了对mongodb的数据访问支持,只需要继承MongoRepository

①、创建一个接口继承MongoRepository

public interface UserRepository extends MongoRepository<User,String>{}

②、将上面的接口注入到业务类中

@Autowired
private UserRepository userRepository;//添加操作
@Test
public void create(){User user = new User();user.setAge(16);user.setName("james");user.setEmail("james.qq.com");User u = userRepository.save(user);
}//查询所有
@Test
public void findId(){List<Uer> all = userRepository.findAll();
}//根据id查询
@Test
public void findId(){User user = userRepository.findById("id值").get();
}//条件查询
@Test
public void findUserList(){User user = new User();user.setAge(23);user.setName("jordan");Example<User> userExample = Example.of(user);List<User> all = userRepository.findAll(userExample);
}//模糊查询
@Test
public void findLikeUserList(){//设置模糊查询的匹配规则(设置模糊查询,忽略大小写)ExampleMatcher matcher = ExampleMatcher.matching().withStringMatcher(ExampleMather.StringMatcher.CONTAINING).withIgnoreCase(true);User user = new User();user.setAge(23);user.setName("jor");Example<User> userExample = Example.of(user,matcher);List<User> all = userRepository.findAll(userExample);
}//分页查询
@Test
public void findPageUserList(){//设置分页参数//0代表第一页Pageable pageable = PageRequest.of(0,3);User user = new User();user.setName("jordan");Example<User> userExample = Example.of(user);Page<User> page = userRepository.findAll(userExample,pageable);  page.getTotalPages();//总页数
}//修改
@Test
public void updateUser(){User user = userRepository.findById("id值").get();user.setAge(100);user.setName("jordan");user.setEmail("jordan@qq.com");User save = userRepository.save();//如果有id表示修改,没有id表示保存
}//删除
@Test
public void deleteUser(){userRepository.deleteById("id值");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust学习——方法 Method

文章目录 方法 Method定义方法self、&self 和 &mut self方法名跟结构体字段名相同 带有多个参数的方法关联函数多个 impl 定义为枚举实现方法 rust 结构体与枚举的区别回答1回答2 方法 Method 从面向对象语言过来的同学对于方法肯定不陌生&#xff0c;class 里面就充斥…

【proteus】8086仿真/汇编:创建项目并添加汇编代码文件

1.创建好新项目 2.点击source code 弹出VSM 3. 4.注意两个都不勾选 可以看到schematic有原理图出现 5. 再次点击source code 6.project/project settings&#xff0c;取消勾选embed 7. add 8.输入文件名保存后&#xff1a; 注意&#xff1a;proteus不用写dos的相关语句 。

C++第一篇--关键字以及命名空间

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 &#x1f384; 前言 …

31一维信号滤波(限幅滤波、中值滤波、均值滤波、递推平均滤波),MATLAB程序已调通,可直接运行。

一维信号滤波&#xff08;限幅滤波、中值滤波、均值滤波、递推平均滤波&#xff09;&#xff0c;MATLAB程序已调通&#xff0c;可直接运行。 31matlab、中值滤波、信号处理 (xiaohongshu.com)

螺旋矩阵[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个m行n列的矩阵matrix&#xff0c;请按照顺时针螺旋顺序&#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xf…

性能优化:JIT即时编译与AOT提前编译

优质博文&#xff1a;IT-BLOG-CN 一、简介 JIT与AOT的区别&#xff1a; 两种不同的编译方式&#xff0c;主要区别在于是否处于运行时进行编译。 JIT:Just-in-time动态(即时)编译&#xff0c;边运行边编译&#xff1a;在程序运行时&#xff0c;根据算法计算出热点代码&#xf…

【题解 单调队列优化dp】 简单的加法乘法计算题

题目描述&#xff1a; 分析&#xff1a; 由于对于每一步而言&#xff0c;我们都需要的是最小步数 所以我们很显然的可以写出一个dp方程&#xff1a; 设 f [ i ] f[i] f[i]表示达到i时的最小步数 我们有两种操作&#xff0c;也就是说我们可以通过一下两种方式转移过来&#xff…

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET “/**“

解决使用WebTestClient访问接口报[185c31bb] 500 Server Error for HTTP GET "/**" 问题发现问题解决 问题发现 WebTestClient 是 Spring WebFlux 框架中提供的用于测试 Web 请求的客户端工具。它可以不用启动服务器&#xff0c;模拟发送 HTTP 请求并验证服务器的响…

力扣刷题 day54:10-24

1.十进制整数的反码 每个非负整数 N 都有其二进制表示。例如&#xff0c; 5 可以被表示为二进制 "101"&#xff0c;11 可以用二进制 "1011" 表示&#xff0c;依此类推。注意&#xff0c;除 N 0 外&#xff0c;任何二进制表示中都不含前导零。 二进制的反…

CPU眼里的C/C++:1.2 查看变量和函数在内存中的存储位置

写一个很简单的 c 代码&#xff0c;打印一些“地址”&#xff0c; 也就是变量、函数的“存储位置”&#xff1a;当程序被加载到内存后&#xff0c;它们具体是存在哪里&#xff0c;可以用精确的数值来表示&#xff0c;这就是内存地址。 https://godbolt.org/z/Ghh9ThY5Y #inc…

Java基础篇 | Java8流式编程

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

自然语言处理---Transformer模型

Transformer概述 相比LSTM和GRU模型&#xff0c;Transformer模型有两个显著的优势&#xff1a; Transformer能够利用分布式GPU进行并行训练&#xff0c;提升模型训练效率。 在分析预测更长的文本时&#xff0c;捕捉间隔较长的语义关联效果更好。 Transformer模型的作用 基于seq…

Ai写作创作系统ChatGPT网站源码+图文搭建教程+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

一文了解AIGC与ChatGPT

关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、AIGC简介 1.AIGC基础 (1)AIGC是什么 AIGC是人工智能图形计算的缩写&#xff0c;是一种基于图形处理器&#xff08;GPU&#xff09;的计算技术&#xff0c;可以加速各种…

业务出海、高效传输、动态加速,尽在云栖大会「CDN与边缘计算」专场

2023杭州云栖大会&#xff0c;即将热力来袭。 一场云计算盛会&#xff0c;500前沿话题&#xff0c;3000科技展品&#xff0c;与阿里云一起&#xff0c;共赴72小时的Tech沉浸之旅。 今日&#xff0c;「CDN与边缘计算」Tech专场&#xff0c;重磅议题抢先知晓&#xff01; 01 「…

Elasticsearch的增删查改详细操作

目录标题 一、创建索引二、查看索引三、修改索引四、删除索引五、向索引增加数据 一、创建索引 单独创建索引 PUT /test1 # test1 为索引名称自定义{"settings":{ # 创建index 需要有效的xcontent字节及Json格式 否则创建不成功 "index":{"number_…

log函数解释

log函数是指数函数y bx 的反函数,用于求数字以某个数为底的对数。log函数的定义:设b>0,b≠1,对于任意实数x > 0,如果存在唯一的实数y,使得 b^y x,则称y为以b为底x的对数,记为:y log_b(x)这里b称为对数的底数。对数运算的底数通常取10和e。常见的对数运算有:1. 常用对数…

前后端交互—跨域与HTTP

跨域 代码下载 同源策略 同源策略(英文全称 Same origin policy)是浏览器提供的一个安全功能。 MDN 官方给定的概念:同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这 是一个用于隔离潜在恶意文件的重要安全机制。 通俗的理解:浏览器规定&a…

测试C#调用Windows Media Player组件

新建基于.net framework的Winform项目&#xff0c;可以通过添加引用的方式选择COM组件中的Windows Media Player组件&#xff0c;如下图所示&#xff1a;   也可以在VS2022的工具箱空白处点右键&#xff0c;选择“选择项…”菜单。   在弹出的选择工具箱项窗口中&#xf…

小样本学习(2)--LibFewShot使用

目录 一、LibFewShot安装 1、LibFewShot代码仓库 2、配置环境 3、测试安装是否正确 二、LibFewShot结构 1、config文件夹 2、core文件夹 3、reproduce文件夹 4、results文件夹 三、如何训练自己的数据集 1、调用主配置文件 2、修改主配置文件 一、LibFewShot安装…