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.pswp.cn/news/209078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209078.shtml
英文地址,請注明出處:http://en.pswp.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) 金絲…