0.序章

致命的面试问题:为什么使用MongoDB?

大型的分布式的文档型数据库,也是NoSQL数据库(例如 redis)

MongoDB适合数据量大而价值又低的这种数据(播放进度、评论、弹幕,实时数据的CRUD)

因为数据量大,所以不适合用redis,因为redis内存没这么大;

因为价值低,量又大,所以不适合存储在MySQL中;

1.MongoDB的相关概念

常识性的内容(类比MySQL学习):

MongoDB:                                                          MySQL:

database 数据库                                                  database数据库

collection 集合(建议结构一样)                         table表(数据结构必须相同)

Document文档(json BSON Binarry-Json)       row行

field字段                                                               column列

_id 主键                                                                id主键

一个数据库可以有多个集合,一个集合可以保存多条Document。


2.安装过程(在docker环境中):

mkdir -p /opt/mongo/data/dbdocker load < /opt/mongo.tardocker run -d --restart=always -p 27017:27017 --name mongodb -v /opt/mongo/data/db:/data/db mongo:8.0-rc

3.命令行

数据库(database)

# 查看数据库
show dbs# 切换或者新增库(懒加载,当数据库中有集合或者数据时,才会真实创建)
use {dbName}# 删除库
db.dropDatabase()

集合(collection)

# 创建集合(不是必须操作,操作数据时如果集合不存在则自动创建)
db.createCollection("colName")# 查看集合  
show collections# 删除集合
db.{colName}.drop()

文档(Document)

# 新增 insert(过期) save(移除)   insertOne insertMany
db.{colName}.insertOne({k1:v1,k2:v2})
db.{colName}.insertMany([{k1:v1,k2:v2}, {k1:v1,k2:v2}, {k1:v1,k2:v2}])# 查询所有
db.{colName}.find()# 基本查询:等值
db.{colName}.find({k: v, k: v})# 不等值查询:like($regex) >($gt) <($lt) >=($gte) <=($lte) !=(ne)
db.{colname}.find({k: {$regex: v}})
db.{colName}.find({k: /v/})# or查询:或者关系
db.{colName}.find({$or: [{k: v}, {k: v}]})# 排序
db.{colName}.find().sort({key: 1/-1})# 分页
db.{colName}.find().skip((pageNum-1))*pageSize).limit(pageSize)# 更新
db.{colName}.updateOne({查询条件}, {$set: {k: v, k: v}})# 删除
db.{colName}.deleteOne({k: v})
db.{colName}.deleteMany({k: v})
db.{colName}.deleteMany({})

4.Java客户端

UI客户端

官方提供的GUI客户端:MongoDB Compass

Java客户端

SpringData-MongoDB

引入依赖:

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

配置:

# mongodb的配置
spring.data.mongodb.uri=mongodb://ip:port/dbNamespring.data.mongodb.host=192.168.30.100
spring.data.mongodb.port=27017
spring.data.mongodb.database=demo

代码:

@SpringBootTest
public class MongoTest {@Autowiredprivate MongoTemplate mongoTemplate;@Testvoid test(){this.mongoTemplate.createCollection("collection1");}
}

实际操作过程:

  1. 引入依赖

  2. 配置

  3. 编写实体类:pojo类

    @Document:作用在类上,标记对应的MongoDB的集合名称

    @Id:作用在主键字段上,建议一定要有一个字段声明为id,_id

    @Field:可以省略,除非字段名不一致

@Document("user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {@Id // 建议一定要有一个字段定义为id,对应到_idLong id;@Field("username") // 该注解可以省略,如果字段名和MongoDB中字段名不一致,才需要指定String name;Integer age;Boolean gender;String pwd;
}

4.mongoTemplate实现文档的CRUD:数据库和集合都可以不用显式创建

	// 新增一个 批量新增@Testvoid testInsert(){this.mongoTemplate.insert(new User(1L, "柳岩", 20, false, "123456"));}// 更新@Testvoid testUpdate(){
//        UpdateResult result = this.mongoTemplate.updateFirst(UpdateResult result = this.mongoTemplate.updateMulti(
//                Query.query(Criteria.where("age").gte(33)),Query.query(Criteria.where("name").regex("小")),Update.update("age", 30),User.class);System.out.println(result.getMatchedCount());System.out.println(result.getModifiedCount());}// 删除@Testvoid testDelete(){DeleteResult result = this.mongoTemplate.remove(Query.query(Criteria.where("age").lte(23)), User.class);System.out.println(result.getDeletedCount());}

5.查询条件:

this.mongoTemplate.find(Query对象)
Query对象的初始化:Query.query(Criteria)
Criteria对象的初始化:Criteria.where("key").is/gt/gte/lt/lte/ne/regex("value").and("key1").is("value1")
排序:Query.query().with(Sort.by(Order.asc/desc("key")))
分页:Query.query().skip((pageNum-1)*pageSize).limit(pageSize)
        this.mongoTemplate.find(Query.query(Criteria.where("age").lte(30)
//                .andOperator(Criteria.where("age").lte(34))  // 同一个字段使用多次,需要andOperator.and("name").regex("小") // 如果是不同字段,一直向后进行and操作.and("pwd").is("123456").orOperator(Criteria.where("name").regex("小")) // 得出的交集不是并集。), User.class).forEach(System.out::println);// 排序this.mongoTemplate.find(Query.query(Criteria.where("name").regex("小")).with(Sort.by(Sort.Order.asc("age"))).skip(8).limit(4).with(PageRequest.of(2, 4)) // 页码从0开始, User.class).forEach(System.out::println);

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

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

相关文章

RedisCache与StringRedisTemplate的深度对比

1. 基本概念 RedisCache ​​定位​​&#xff1a;自定义封装的Redis缓存工具类​​特点​​&#xff1a;通常针对业务场景进行了高层抽象​​典型功能​​&#xff1a; 带过期时间的缓存操作自定义序列化方式业务键前缀管理简化常用操作API StringRedisTemplate ​​定位…

HOOPS Visualize技术详解(二):3D图形系统HOOPS/3DGS的段结构与属性机制

在工业级三维可视化领域中&#xff0c;HOOPS Visualize凭借其高性能和模块化设计被广泛应用于CAD、CAM、仿真、BIM等工程软件中。其中&#xff0c;HOOPS 3D Graphics System&#xff08;简称HOOPS/3DGS&#xff09;是HOOPS Visualize的核心组件&#xff0c;承担着图形场景管理、…

随机化在临床试验中的应用与挑战

一、随机化的核心目的 1.1 控制混杂偏倚 1.1.1 平衡预后因素 确保已知/未知预后因素在组间分布均衡,避免基线不平衡影响结果。 1.1.2 避免选择偏倚 防止研究者或患者主观选择分组,保障组间差异归因于干预。 1.2 保障统计推断有效性 1.2.1 满足独立性假设 满足统计检验…

在C++中#pragma“可选预处理指令的作用“。

文章目录 1. 标准定位&#xff1a;2. 语法形式&#xff1a;3. 常见用途举例4. 为什么用 #pragma&#xff1f;5. 宏里用 __pragma / _Pragma6. 常见误区 在 C/C 里&#xff0c;#pragma 本质上是“可选预处理器指令”&#xff0c;用来告诉编译器在编译某段代码时启用或关闭某些特…

windows系统中docker数据迁移出系统盘

1、关闭docker 2、移动docker数据 找到docker数据目录&#xff0c;一般在C:\Users\61050\AppData\Local\Docker文件&#xff0c;将整个docker目录复制到其他盘&#xff08;例如 D:\Docker&#xff09;&#xff0c;为保证不出错&#xff0c;可以先提前复制一份。 3、创建符号链…

win11电脑突然休眠问题排查

WinR, 输入eventvwr.msc打开事件查看器。找到出现问题的时间点那条数据。会显示原因。首先还是要先排查原因。再去猜测。我因为猜测就直接去了科技市场扫灰加硅来了一个遍。另外还买了散热风扇和金属支架。虽然不知道有没有必要。但是别人是很原因。到头来早上还是发现自动休眠…

安卓开发 lambda表达式

第一步&#xff1a;初学者代码 (没有 Lambda 的“旧”方法) 假设我们有一个简单的需求&#xff1a;执行一个耗时的计算&#xff08;比如网络请求&#xff09;&#xff0c;并在计算完成后&#xff0c;通过一个“回调”来通知我们结果。 1. 定义一个回调接口 这个接口只有一个…

JMeter中变量如何使用?

在性能测试的世界中&#xff0c;Apache JMeter是一把利器&#xff0c;凭借其强大的可扩展性与图形化操作界面&#xff0c;在工业界和开源社区中广受青睐。而“变量的使用”作为JMeter中提高测试灵活性、可维护性和复用性的关键技术点&#xff0c;却常常被初学者忽略或误用。本文…

印度和澳洲的地理因素

研究表明&#xff0c;气温每升高1℃&#xff0c;劳动生产率可能下降1.5%至3%&#xff0c;甚至更多。印度大部分地区夏季高温且湿度较大&#xff0c;有地方60多度&#xff0c;严重限制了劳动效率和农业产出。若印度整体地理位置北移约300公里&#xff0c;平均气温将降低&#xf…

3D Gaussian Splatting

3D高斯溅射&#xff08;3D Gaussian Splatting &#xff09;是一种基于显式三维高斯分布的场景表示与渲染方法。与传统的三维重建技术&#xff08;如多边形网格、点云或隐式神经辐射场NeRF&#xff09;不同&#xff0c;3DGS将场景表示为大量带有属性的3D高斯椭球的集合&#xf…

鸿蒙5:布局组件

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

Flink状态和容错-基础篇

1. 概念 flink的状态和容错绕不开3个概念&#xff0c;state backends和checkpoint、savepoint。本文重心即搞清楚这3部分内容。 容错机制是基于在状态快照的一种恢复方式。但是状态和容错要分开来看。 什么是状态&#xff0c;为什么需要状态&#xff1f; 流计算和批计算在数…

【若依学习记录】RuoYi后台手册——分页实现

目录 若依系统简介 前端调用实现 前端调用举例 后台逻辑实现 若依系统简介 RuoYi 是一个基于 Spring Boot、Apache Shiro、MyBatis 和 Thymeleaf 的后台管理系统&#xff0c;旨在降低技术难度&#xff0c;助力开发者聚焦业务核心&#xff0c;从而节省人力成本、缩短项目周…

从台式电脑硬件架构看前后端分离开发模式

在软件开发领域,前后端分离早已成为主流架构设计理念。它将系统的业务逻辑处理与用户界面展示解耦,提升开发效率与系统可维护性。有趣的是,我们日常生活中常见的台式电脑硬件架构,竟与这一理念有着异曲同工之妙。今天,就让我们从台式电脑的硬件组成出发,深入探讨其与前后…

可观测性的哲学

在现代系统架构中&#xff0c;“可观测性&#xff08;Observability&#xff09;”已不仅仅是一个工程实践&#xff0c;是一种关于“理解世界”的哲学姿态, 还是一种帮助架构演变的认知工具。从柏拉图的“洞穴寓言”出发&#xff0c;我们可以构建起一条从被动接受投影&#xff…

开疆智能CCLinkIE转ModbusTCP网关连接傲博机器人配置案例

本案例是通过CClinkIE转ModbusTCP网关&#xff0c;连接傲博机器人的配置案例 PLC配置 打开三菱PLC组态软件GXWORK3设置CClinkIE一侧的参数配置&#xff0c;首先设置PLC的IP地址 双击详细设置进入CClinkIE配置 添加通用从站IP地址以及占用点数 设置好分配的软元件&#xff0c;确…

Bash Shellshock

CVE-2014-6271(Bash Shellshock远程命令注入漏洞) 该服务启动后有路径http://your-ip:port/victim.cgi和http://your-ip:port/safe.cgi。其中safe.cgi是新版页面&#xff0c;victim是bash4.3生成的页面。 漏洞位置在User-Agent中victim.cgi: User-Agent: () { foo; }; echo C…

以软件系统开发为例,解释PMO 与IPD、CMMI、项目管理什么区别和联系

以「开发一套智能仓储管理系统&#xff08;WMS&#xff09;」为例&#xff0c;拆解软件项目经理视角下的IPD、CMMI、项目管理和PMO如何协同运作&#xff1a; 场景设定 项目目标&#xff1a;6个月内交付WMS系统&#xff0c;支持日均10万订单处理关键角色&#xff1a; 你&#x…

TDengine 3.3.5.0 新功能 —— 查看库文件占用空间、压缩率

1. 背景 TDengine 之前版本一直没有通过 SQL 命令查看数据库占用的磁盘空间大小&#xff0c;从 3.3.5.0 开始&#xff0c;增加了这个方便且实用的小功能&#xff0c;这里详细介绍下。 2. SQL 基本语法 select expr from information_schema.ins_disk_usage [where condtion]…

蚂蚁百宝箱体验:如何快速创建“旅游小助手”AI智能体

蚂蚁百宝箱作为站式智能体应用开发平台&#xff0c;致力于为AI开发者提供简单、高效、快捷的智能体创作体验。作为业内领先的AI应用开发平台&#xff0c;开发者可以根据自身的个性化需求&#xff0c;基于各式各样的大模型来创建一个属于自己的智能体应用。 蚂蚁百宝箱&#xf…