数据库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.rhkb.cn/news/166215.html

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

相关文章

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6

一、FreeRTOS 介绍 什么是 FreeRTOS &#xff1f; Free即免费的&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统。 注意&#xff1a;RTOS不是指某一个确定的系统&#xff0c;而是指一类操作系统。比如&#xff1a;uc/OS&#xff0c;Fr…

[翻译]理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要

理解Postgres的IOPS&#xff1a;为什么数据即使都在内存&#xff0c;IOPS也非常重要 磁盘IOPS&#xff08;每秒输入/输出操作数&#xff09;是衡量磁盘系统性能的关键指标。代表每秒可以执行的读写操作数量。对于严重依赖于磁盘访问的PG来说&#xff0c;了解和优化磁盘IOPS对实…

虹科分享 | 赋能物流机器人:CANopen通信如何发挥重要作用?

现代物流领域迅速融入了技术进步&#xff0c;特别是随着自主机器人的兴起&#xff0c;这一趋势越发明显。确保这些机器人在复杂的仓库环境中精确运行的一个关键方面是CANopen通信协议。该协议集成了各种组件&#xff08;电机、传感器、摄像头和先进的电池系统&#xff09;&…

flask入门(四)前后端数据传输

文章目录 1、flask后端接收来自前端的数据1&#xff09;如果前端提交的方法为POST2&#xff09;如果前段提交的方法是GET 2、flask后端向前端传数据3、案例参考文献 1、flask后端接收来自前端的数据 1&#xff09;如果前端提交的方法为POST 后端接收时的代码&#xff1a; xx…

C#使用PPT组件的CreateVideo方法生成视频

目录 需求 实现 CreateVideo方法 关键代码 CreateVideoStatus 其它 需求 我们在使用PowerPoint文档时&#xff0c;经常会使用其导出功能以创建视频&#xff0c;如下图&#xff1a; 手工操作下&#xff0c;在制作好PPT文件后&#xff0c;点击文件 -> 导出 -> 创建视…

云安全—分布式基础

0x00 前言 云必然是依赖于分布式技术来进行实现的&#xff0c;所以有必要学习和来了解分布式相关的内容 0x01 分布式计算 1.基本概述 分布式计算的定义&#xff1a;通过网络互联的计算机都具有一定的计算能力&#xff0c;他们之间互相传递数据&#xff0c;实现信息共享&…

互联网Java工程师面试题·Java 面试篇·第三弹

目录 39、JRE、JDK、JVM 及 JIT 之间有什么不同&#xff1f; 40、解释 Java 堆空间及 GC&#xff1f; 41、你能保证 GC 执行吗&#xff1f; 42、怎么获取 Java 程序使用的内存&#xff1f;堆使用的百分比&#xff1f; 43、Java 中堆和栈有什么区别&#xff1f; 44、“ab”…

记录阿里云服务器(Centos7.9)部署Thingsboard(3.4.2)遇到的一些问题

记录编译Thingsboard遇到的一些问题 部署了一个thingsboard项目到阿里云服务器上&#xff0c;历时十一天&#xff0c;遇到了很多困难&#xff0c;国内关于Thingsboard的资料确实很少&#xff0c;所以想着写一篇博客记录一下&#xff0c;或许能够给以后编译遇到类似问题的人一些…

基于nodejs+vue语言的酒店管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

JavaCV + FFmpeg 播放音视频

JavaCV FFmpeg 播放音视频 1、导入JavaCV库1.1 使用ffmpeg必要库1.2 简单FFmpeg命令 待续~~~~ FFmpeg documentation bytedeco/javacv - GitHub 1、导入JavaCV库 gradle下面这种会导入javacv-platform所有包&#xff0c;非常耗时&#xff1a;https://repo.maven.apache.org/…

安卓14通过“冻结”缓存应用程序腾出CPU,提高性能和内存效率

本月早些时候&#xff0c;我们听说更新到安卓14似乎提高了谷歌Pixel 7和Pixel 6的效率——提高了电池寿命&#xff0c;并在这个过程中减少了热量的产生。现在看来&#xff0c;安卓14的增效功能细节已经公布。 安卓侦探Mishaal Rahman在X&#xff08;前身为Twitter&#xff09;…

需要在 MySQL 服务器中监控的重要指标

MySQL是一个开源的关系数据库管理系统&#xff0c;它基于客户端-服务器模型运行&#xff0c;使用SQL作为其通信模式。它具有灵活性和可扩展性、高安全性、易用性以及无缝处理大型数据集的能力&#xff0c;由于其广泛的功能&#xff0c;MySQL 被用作数据库管理系统的一部分。 什…

c++踩坑点,类型转换

std::string转换到PVOID std::string转换到PVOID的方式如下 这样的话成功转换 “const char *” 类型的实参与 “WCHAR *” “const char *” 类型的实参与 “WCHAR *” 类型的形参不兼容 可以看到这种报错&#xff0c;可以直接强转如下&#xff1a; 但是在我们这里不适…

单目3D目标检测论文汇总

基于语义和几何约束的方法 1. Deep3DBox 3D Bounding Box Estimation Using Deep Learning and Geometry [CVPR2017] https://arxiv.org/pdf/1612.00496.pdfhttps://zhuanlan.zhihu.com/p/414275118 核心思想&#xff1a;通过利用2D bounding box与3D bounding box之间的几何约…

python基础语法(2)

基础语法 前言顺序语句条件语句什么是条件语句语法格式(1) if(2) if - else(3) if - elif - else 缩进和代码块循环语句while 循环for 循环关于continue和break 前言 本文基于pycharm编译器&#xff0c;也可以使用Anaconda 里的编译器&#xff0c;将讲解一些python的一些基础语…

LabVIEW中使用Get LV Class Default Value 出现错误1498

LabVIEW中使用Get LV Class Default Value 出现错误1498 在LabVIEW中开发了一个应用程序&#xff0c;其中包含可以在执行时动态配置插件的基类。生成可执行文件后&#xff0c;当应用程序要执行子类时&#xff0c;收到以下错误信息。 Error1498 occurred at Gen LV Class Defa…

ArmSoM-RK3588编解码之mpp解码demo解析:mpi_dec_test

1. 简介 [RK3588从入门到精通] 专栏总目录 mpi_dec_test 是rockchip官方解码 demo 本篇文章进行mpi_dec_test 的代码解析&#xff0c;解码流程解析 2. 环境介绍 硬件环境&#xff1a; ArmSoM-W3 RK3588开发板 软件版本&#xff1a; OS&#xff1a;ArmSoM-W3 Debian11 3.…

element-ui 以CDN 方式引入原生js开发的几个别坑 (+vue)

element-ui 以CDN 方式引入原生js开发的几个坑 最近两个月太忙了 忙的没空写文章 两个月赶出来了几个的项目 一个是雪佛兰裸眼3D的一个商品屏幕展示项目 一个是广汽云渲染的一个云看车项目 一个是奥迪中国充电桩的网页开发项目&#xff0c; 奥迪中国做个饭也是目前正在做的 不…

C#简单晶圆wafermapping显示示范demo

点击&#xff0c;双击可改变颜色 预设5行8列数据&#xff1a; using (fratte.at.WafermapDisplay.Form1 form_show new fratte.at.WafermapDisplay.Form1()){int[,] data_demo new int[,]{{ 0,0,0,1,0 },{ 0,5,1,0,0 },{ 1,7,6,2,3 },{ 1,0,1,2,3 },{ 0,2,0,2,3 }, { 1,5,6,…

微信小程序开发的OA会议之会议,投票,个人中心的页面搭建及模板

目录 一.自定义组件 1.1.创建 1.2.定义 1.3.编写 1.4.使用 二.会议 2.1.数据 2.2.显示 2.3. 样式 三.个人中心 3.1.页面 3.2.样式 四.投票 4.1.引用 4.2.数据 4.3.页面 4.4.样式 好啦今天就到这里了&#xff0c;希望能帮到你哦&#xff01;&#xff01;&…