MongoTemplate 常用查询

MongoTemplate是Spring Data MongoDB提供的一个Java编程接口,用于操作MongoDB数据库。它提供了一系列方法和功能,以便进行数据的插入、更新、删除和查询等操作。

使用MongoTemplate,你可以通过编写Java代码与MongoDB进行交互,而无需直接编写原生的MongoDB查询语句。它提供了一些便捷的方法,如save、insert、update和remove,用于对文档进行增删改操作。同时,它还支持复杂的查询条件和排序,以及聚合管道查询等高级功能。

1 引用pom

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

2 Aggregation

     是一种强大的数据处理操作,它允许你对集合中的文档进行多个阶段的处理和转换,以生成复杂的结果。

使用聚合操作,你可以对文档进行分组、排序、过滤、投影、计算字段值、连接多个集合等操作,以实现更复杂的数据处理需求

$match    过滤数据,输出符合条件文档    where
$project    修改输入文档结构(筛选展示文档的键)    个人理解(select)
$limit    限制计算文档结果返回数    limit
$sort    文档排序    order by
$group    文档分组    group by
$skip    跳过指定数量的文档    skip
$unwind    展开数组(数组内容拆分显示)    无

$facet:用于在单个聚合管道中执行多个聚合操作,并将结果分组输出。

3  查询方法

    @Override
    public List<Test> getList(Test search) {


       1 区间查询


        Criteria   criteriaInfo =
                Criteria.where("Time").gte(search.getStartTime()).lte(search.getEndTime());

       2 in 查询


         criteriaInfo.and("Code").in(List<String>);


       3  or 查询 两个满足1


         criteriaInfo.orOperator(
                    Criteria.where("title").regex(值),
                    Criteria.where("name").regex(值)
            );

     4 is 等于


       criteriaInfo.and("Status").is(值);

    5 nin 不等于


       criteriaInfo.and("Time").nin(值);

6 ne 不等于某个值的条件
Criteria.where("Status").ne(0)

 
        List<AggregationOperation> aggregationList = new ArrayList<>();
        // Match操作,筛选 
        aggregationList.add(Aggregation.match(  criteriaInfo));

        // 只查出 Test 中的字段 相当于 select *(字段)
        aggregationList.add(
                Aggregation.project("Time")
                       
        );
        Aggregation aggregation = Aggregation.newAggregation(aggregationList);
        List<Test> result;
        result = mongoTemplate.aggregate(
                aggregation, "Test", Test.class).getMappedResults();
        return null;
    }


 
2 查询左连

    @Override
    public List<Test> getList(Test search) {
        Criteria criteria =
                Criteria.where("Time").gte(search.getStartTime()).lte(search.getEndTime());
        List<AggregationOperation> aggregationList = new ArrayList<>();
        // Match操作,筛选 
        aggregationList.add(Aggregation.match(criteria));

        // 只查出 Test 中的字段
        aggregationList.add(
                Aggregation.project("Time") //显字段
                     .andExpression("title2").as("title")  //替换显示字段                   .andExpression("ifNull(status, 0)").as("status")  //替换显示字段   

        );
       // Lookup操作 左连接
        aggregationList.add(LookupOperation.newLookup()
                .from("test2")            //关联表名
                .localField("Time")     // 主表中的关联字段
                .foreignField("Time")  //从表关联的字段
                .as("test3"));    //查询结果表名

        Aggregation aggregation = Aggregation.newAggregation(aggregationList);
        List<Test> result;
        result = mongoTemplate.aggregate(
                aggregation, "Test", Test.class).getMappedResults();
        return null;
    }

3 查询总记数
Map total = mongoTemplate.aggregate(aggregation, "test", Map.class).getUniqueMappedResult();
4 分页

   List<AggregationOperation> aggregationList = new ArrayList<>();

aggregationList.add(Aggregation.skip((search.getPageNum() - 1) * search.getPageSize()));
aggregationList.add(Aggregation.limit(search.getPageSize()));

5 排序

List<Test> dataList= new ArrayList<>(); dataList.sort(Comparator.comparing(Test::getTime).thenComparing(Test::getcode));

6 then(1).otherwise(0)

 是一个伪代码,用来表示在数据聚合操作中的条件逻辑。它的作用是根据条件的满足与否分别赋值不同的结果

new Criteria().andOperator(Criteria.where("Code").in(值)
)).then(1).otherwise(0))

then 方法用来指定条件满足时的赋值结果,otherwise 方法用来指定条件不满足时的赋值结果

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

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

相关文章

二百一十四、Linux——Linux系统时间比电脑时间慢5分钟

一、目的 服务器重启后&#xff0c;发现Linux的系统时间比电脑时间慢5分钟&#xff0c;于是看了些博客&#xff0c;终于找到了解决方法&#xff0c;记录一下&#xff0c;以防止后面出现同样的问题 二、问题 通过date查看&#xff0c;Linux系统时间比电脑时间慢5分钟 &#…

IEEE RAS 机器人最优控制(Model-based Optimization for Robotics)学习资料

系列文章目录 前言 电气和电子工程师学会机器人模型优化技术委员会 一、学习资料 1.1 教程和暑期学校 2020 年 Memmo 欧盟项目暑期班2019年Memmo欧盟项目冬季学校Matthias Gerdts&#xff08;德国慕尼黑联邦国防军大学&#xff09;在拜罗伊特 OMPC 2013 上举办的最优控制教程…

详解vue生命周期

vue2 生命周期 Vue.js是一个流行的JavaScript框架&#xff0c;它使用了一套生命周期钩子函数来管理组件的创建、更新和销毁过程。以下是Vue组件的生命周期钩子函数&#xff1a; beforeCreate&#xff1a;在实例初始化之后&#xff0c;数据观测 (data observer) 和 event/watch…

字节跳动ZNS SSD应用案例解析

一、ZNS SSD基本原理 ZNS SSD的原理是把namespace空间划分多个zone空间&#xff0c;zone空间内部执行顺序写。这样做的优势&#xff1a; 降低SSD内部的写放大&#xff0c;提升SSD的寿命 降低OP空间&#xff0c;host可以获得更大的使用空间 降低SSD内部DRAM的容量&#xff0c;…

一款可无限扩展的软件定时器开源框架项目代码

摘自链接 时间片轮询架构如何稳定高效实现&#xff0c;取代传统的标志位判断方式&#xff0c;更优雅更方便地管理程序的时间触发操作。 可以在STM32单片机上运行。

基于SSM的社区管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

LeetCode(52)最小栈【栈】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 最小栈 1.题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void…

区分工业设计软件中CAD、CAE、CAM、PDM等概念

工业设计软件是专门用于辅助工业设计师在产品设计和开发过程中进行各种任务的计算机程序。这些软件提供了广泛的工具和功能&#xff0c;帮助设计师创建、分析、修改和可视化产品的概念和详细设计。 CAD 计算机辅助设计&#xff08;Computer-Aided Design&#xff0c;CAD&…

15、SQL注入——Sqlmap

文章目录 一、Sqlmap简介1.1 sqlmap可以对URL干嘛&#xff1f;1.2 Sqlmap支持的注入技术1.3 SQLmap检测注入漏洞的流程1.4 Sqlmap的误报检测机制 二、sqlmap基本使用 一、Sqlmap简介 sqlmap使用教程 1.1 sqlmap可以对URL干嘛&#xff1f; 判断可注入的参数判断可以使用哪一种…

汽车电子智能保险丝解决方案

一、背景知识 在过去的几十年里&#xff0c;电子在汽车系统创新中发挥了关键作用。新型半导体器件具有新颖的功能&#xff0c;增强了车辆机械系统提供的功能。 虽然半导体解决方案和电子产品将继续在汽车电子产品中发挥关键作用&#xff0c;但展望未来&#xff0c;汽车创新将…

css顺时针旋转90°再3D中绕Y轴旋转180°

CSS 顺时针旋转 90 再 3D 中绕 Y 轴旋转 180 的示例代码如下&#xff1a; div {transform: rotate(90deg) perspective(500px) rotateY(180deg); }在这个示例中&#xff0c;元素被先进行了 2D 顺时针旋转 90&#xff0c;然后设置了 perspective 属性来定义元素的视角距离&…

UE4 材质实现Glitch效果

材质实现Glitch效果 UE4 材质实现Glitch效果预览1预览2 UE4 材质实现Glitch效果 预览1 添加材质函数&#xff1a; MF_RandomNoise 添加材质&#xff1a; 预览2 添加材质函数MF_CustomPanner&#xff1a; 添加材质函数&#xff1a;MF_Glitch 材质添加&#xff1a; 下面用…

Docker 部署 2FAuth 服务

拉取最新版本的 2FAuth 镜像&#xff1a; $ sudo docker pull 2fauth/2fauth:latest在本地预先创建好 2fauth 目录, 用于映射 2FAuth 容器内的 /2fauth 目录。 使用以下命令, 在 前台 运行 2FAuth 容器: $ sudo docker run -it --rm --name 2fauth -p 10085:8000/tcp -v /ho…

3D材质编辑:制作被火烧的木头

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

css实现头部占一定高度,内容区占剩余高度可滚动

上下布局&#xff1a; <div class"container"><header class"header">头部内容</header><div class"content">内容区域</div> </div>.container {display: flex;flex-direction: column;height: 100vh; /*…

SQL Server 2017数据库window server服务器改名操作

在window服务器修改机器名重新加域后&#xff0c;需要执行下面的SQL语句修改数据库里面记录的机器名字&#xff0c;才能在修改后通过新名字连接数据库。 if serverproperty(servername) <> servername begin declare server sysname set server ser…

53. Protocol buffer 的Go使用

文章目录 一、介绍二、安装三、protoc3语法1、 protoc3 与 protoc2区别2、proto3生成go代码包Message内嵌Message字段单一标量字段单一message字段可重复字段slicemap字段枚举 一、介绍 Protobuf是Google旗下的一款平台无关&#xff0c;语言无关&#xff0c;可扩展的序列化结构…

AWS KeyPair密钥格式转换PPK<>PEM

概述说明 PEM&#xff08;Privacy Enhanced Mail&#xff09;和PPK&#xff08;Putty Private Key&#xff09;都是与加密和安全相关的文件格式&#xff0c;通常用于存储私钥信息。它们在不同的上下文中使用&#xff0c;并且与不同的软件和协议相关联。 PEM&#xff08;Priva…

【kubernetes】k3s集群搭建(正在更新……)

文章目录 一、k3s简介二、快速搭建1.控制平面2.镜像加速 Pod容器集1.创建和管理pod Deployment(部署)与ReplicaSet(副本集)滚动更新 Service命名空间YAML语法管理对象常用命令缩写YAML规范 声明式配置对象标签选择器 容器运行时接口(CRI)与镜像导入导出容器运行时接口(CRI) 金丝…