1. 程式人生 > >MongoTemplate針對多條件查詢以及複雜查詢基本示例

MongoTemplate針對多條件查詢以及複雜查詢基本示例

針對mongotemplate的查詢寫法,可能會跟其他orm框架裡面的查詢寫法混淆,特地記錄一下.
一. 常用查詢:

  1. 查詢一條資料:(多用於儲存時判斷db中是否已有當前資料,這裡 is 精確匹配,模糊匹配 使用 regex…)
public PageUrl getByUrl(String url) {  
        return findOne(new Query(Criteria.where("url").is(url)),PageUrl.class);  
    }  
  1. 查詢多條資料:linkUrl.id 屬於分級查詢
public List<PageUrl> getPageUrlsByUrl
(int begin, int end,String linkUrlid) { Query query = new Query(); query.addCriteria(Criteria.where("linkUrl.id").is(linkUrlid)); return find(query.limit(end - begin).skip(begin), PageUrl.class); }
  1. 模糊查詢:
public long getProcessLandLogsCount(List<Condition> conditions)  
    {  
        Query query = new
Query(); if (conditions != null && conditions.size() > 0) { for (Condition condition : conditions) { query.addCriteria(Criteria.where(condition.getKey()).regex(".*?\\" +condition.getValue().toString()+ ".*")); } } return
count(query, ProcessLandLog.class); }

最下面,我在程式碼親自實踐過的模糊查詢,只支援欄位屬性是字串的查詢,你要是查欄位屬性是int的模糊查詢,還真沒轍。

  1. gte: 大於等於,lte小於等於…注意查詢的時候各個欄位的型別要和mongodb中資料型別一致
public List<ProcessLandLog> getProcessLandLogs(int begin,int end,List<Condition> conditions,String orderField,Direction direction)  
    {  
        Query query = new Query();  
        if (conditions != null && conditions.size() > 0) {  
            for (Condition condition : conditions) {  
                if(condition.getKey().equals("time")){  
                    query.addCriteria(Criteria.where("time").gte(condition.getValue())); //gte: 大於等於  
                }else if(condition.getKey().equals("insertTime")){  
                    query.addCriteria(Criteria.where("insertTime").gte(condition.getValue()));  
                }else{  
                    query.addCriteria(Criteria.where(condition.getKey()).is(condition.getValue()));  
                }  
            }  
        }  
        return find(query.limit(end - begin).skip(begin).with(new Sort(new Sort.Order(direction, orderField))), ProcessLandLog.class);  
    }  

public List<DpsLand> getDpsLandsByTime(int begin, int end, Date beginDate,Date endDate) {  
  return find(new Query(Criteria.where("updateTime").gte(beginDate).lte(endDate)).limit(end - begin).skip(begin),  
    DpsLand.class);  
 }  

查詢欄位不存在的資料

public List<GoodsDetail> getGoodsDetails2(int begin, int end) {  
        Query query = new Query();  
        query.addCriteria(Criteria.where("goodsSummary").not());  
        return find(query.limit(end - begin).skip(begin),GoodsDetail.class);  
    }  

查詢欄位不為空的資料

Criteria.where("key1").ne("").ne(null)  

查詢或語句:a || b

Criteria criteria = new Criteria();  
criteria.orOperator(Criteria.where("key1").is("0"),Criteria.where("key1").is(null));  

查詢且語句:a && b這裡寫程式碼片
Criteria criteria = new Criteria();
criteria.and(“key1”).is(false);
criteria.and(“key2”).is(type);
Query query = new Query(criteria);
long totalCount = this.mongoTemplate.count(query, Xxx.class);

查詢一個屬性的子屬性,例如:查下面資料的key2.keyA的語句

 var s = {  
       key1: value1,  
       key2: {  
           keyA: valueA,  
           keyB: valueB  
       }  
   };  

@Query("{'key2.keyA':?0}")  
List<Asset> findAllBykeyA(String keyA);  
  1. 查詢數量:
public long getPageInfosCount(List<Condition> conditions) {  
        Query query = new Query();  
        if (conditions != null && conditions.size() > 0) {  
            for (Condition condition : conditions) {  
                query.addCriteria(Criteria.where(condition.getKey()).is(condition.getValue()));  
            }  
        }  
        return count(query, PageInfo.class);  
    }  
  1. 更新一條資料的一個欄位:
public WriteResult updateTime(PageUrl pageUrl) {  
        String id = pageUrl.getId();  
        return updateFirst(new Query(Criteria.where("id").is(id)),Update.update("updateTime", pageUrl.getUpdateTime()), PageUrl.class);  
    }  
  1. 更新一條資料的多個欄位:
//呼叫更新  
private void updateProcessLandLog(ProcessLandLog processLandLog,  
            int crawlResult) {  
        List<String> fields = new ArrayList<String>();  
        List<Object> values = new ArrayList<Object>();  
        fields.add("state");  
        fields.add("result");  
        fields.add("time");  
        values.add("1");  
        values.add(crawlResult);  
        values.add(Calendar.getInstance().getTime());  
        processLandLogReposity.updateProcessLandLog(processLandLog, fields,  
                values);  
    }  
//更新  
public void updateProcessLandLog(ProcessLandLog land, List<String> fields,List<Object> values) {  
        Update update = new Update();  
        int size = fields.size();  
        for(int i = 0 ; i < size; i++){  
            String field = fields.get(i);  
            Object value = values.get(i);  
            update.set(field, value);  
        }  
        updateFirst(new Query(Criteria.where("id").is(land.getId())), update,ProcessLandLog.class);  
    }  
  1. 刪除資料:
public void deleteObject(Class<T> clazz,String id) {  
        remove(new Query(Criteria.where("id").is(id)),clazz);  
    }  

9.儲存資料:

//插入一條資料  
public void saveObject(Object obj) {  
        insert(obj);  
    }  

//插入多條資料      
public void saveObjects(List<T> objects) {  
        for(T t:objects){  
            insert(t);  
        }  
    }  

相關推薦

MongoTemplate針對條件查詢以及複雜查詢基本示例

針對mongotemplate的查詢寫法,可能會跟其他orm框架裡面的查詢寫法混淆,特地記錄一下. 一. 常用查詢: 查詢一條資料:(多用於儲存時判斷db中是否已有當前資料,這裡 is 精確匹配,模糊匹配 使用 regex…) public Pa

HBase條件及分頁查詢的一些方法

nosql數據庫 應用場景 實現簡單 信息 byte 多條 多個 不可用 寫性能 HBase是Apache Hadoop生態系統中的重要一員,它的海量數據存儲能力,超高的數據讀寫性能,以及優秀的可擴展性使之成為最受歡迎的NoSQL數據庫之一。它超強的插入和讀取性能與它的數據

mysql查詢語句 和 表關聯查詢 以及查詢

另一個 多表 uri 多條件 排序 image 毫無 表連接 exist 原文地址: http://blog.csdn.net/github_37767025/article/details/67636061 1.查詢一張表: select * from 表名;

mysql(三):mysql查詢語句 和 表關聯查詢 以及查詢

1.查詢一張表:select * from 表名; 2.查詢指定欄位:select 欄位1,欄位2,欄位3....from 表名; 3.where條件查詢:select 欄位1,欄位2,欄位3 frome 表名 where 條件表示式; 例:select *

java 使用elasticsearch 以及複雜查詢語句構建

elastcisearch 為java開發了API介面,方便java程式的使用。 首先引入jar包,需要跟elasticsearch版本對應。下面是maven的引入,也可以下載jar包引入。 <!-- http://mvnrepository.

hibernate實現條件組合的模糊查詢

主要程式碼: @Transactional public List<Items> queryitems(int id, String name, String city, String price) { String hql="from Items it

Hibernate條件模糊分頁查詢

因為要做一個分頁的功能,所以就上網隨便找了一個hibernate分頁的例項,但是總是報出: org.hibernate.QueryParameterException: could not locate named parameter這個惱人的錯誤,卻又查不到

ssh:hql動態查詢+條件自由拼接+模糊查詢

@Override public List<Book> getByInfo(String name, String author, String publisher) { Session session=

二分查詢以及二分查詢的時間複雜

 看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何一個開始接觸“真正”演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫一個吧,要求是對num[]={1,

二分查詢以及二分查詢的變形

//二分查詢: #include <stdio.h> int binsearch(int x, int v[], int n); main() {   int i, result, n;  int wait;    int x = 17; // 需要查詢的數值

【資料結構】5.1 順序表的查詢以及二分查詢的實現

類的結構如下: class StaticSearchTable { private: int *data; int data_number; bool search_seq(int loc,int key); void select_sort(); bool f

列表查詢及二分查詢 列表查詢以及二分查詢

列表查詢以及二分查詢 一、列表查詢 1、列表查詢:從列表中查詢指定元素 輸入:列表、待查詢元素 輸出:元素下標或未查詢到元素 2、順序查詢:從列表第一個元素開始,順序進行搜尋,直到找到為止。返回找到的那個索引 3、二分查詢:從有序列表

【系統學習SpringBoot】再遇Spring Data JPA之JPA應用詳解(自定義查詢複雜查詢

在此,對Spring Data Jpa做詳細的筆記(使用層面的,原理層日後再說哈哈。) 一、Spring Data JPA設定建立方式: 建立方式一共分為四種: #配置資料庫,使用SpringJPA spring: datasource:

(25)ASP.NET Core EF查詢複雜查詢運算子、原生SQL查詢、非同步查詢

1.複雜查詢運算子 在生產場景中,我們經常用到LINQ運算子進行查詢獲取資料,現在我們就來了解下生產場景經常出現幾種複雜查詢運算子。 1.1聯接(INNER JOIN) 藉助LINQ Join運算子,可根據每個源的鍵選擇器連線兩個資料來源,並在鍵匹配時生成值的元組。 var query = fro

MongoDB mongotemplate條件符合查詢

一、一個 Criteria將所有條件整合,注意(對同一個屬性加兩次限制需使用andOperator,並且只能使用一次) 分、 排序、按時間查詢 Query query = new Query(); //必須條件 Criteria c = C

Spring Data JPA 複雜/條件組合查詢

1: 編寫DAO類或介面  dao類/介面 需繼承 publicinterface JpaSpecificationExecutor<T>          介面;        如果需要分頁,還可繼承   publicinterface Pa

表的複雜查詢----查詢、兩表的條件連線、內連線(自連線)、左外連線、右外連線、子查詢、分頁查詢

基於兩個或兩個以上的表或檢視的查詢。例如:emp和dept是兩張表。(這兩張表的deptno是共同欄位)    ①通過什麼條件把兩張表關聯(如果不使用條件關聯將產生行數乘積的合集---笛卡爾集)例子:emp表字段包含:每行有自己的名字和id以及自己的上級的id,同時自己的上級

spring boot 複雜條件分頁排序列表查詢

Controller層就不寫了,主要貼一下Service程式碼。 Service import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.

mapper自動生成複雜表示式的條件查詢

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

spring data jpa 實現條件複雜查詢表聯查

最近發現JPA在處理單表時,很方便,但多表就比較複雜了。今天寫一下端午這兩天琢磨的多條件查詢,還有多表聯查。文章比較長,大部分都是程式碼,不願意看的程式碼copy下去,直接可以實現;想交流的可以看完,然後留言交流。maven依賴啊,配置,繼承寫法等知識點不展開說了,之前寫過一