MongoTemplate的分組與聯表

2022-07-22 09:30:13 字數 1999 閱讀 7363

criteria criteria = criteria.where("classid").is(classid).and("deleted").is(false);

groupoperation groupoperation = group("userid").max("score").as("score")

.last("classid").as("classid")

.last("userid").as("userid")

.last("score").as("score")

.last("subjectid").as("subjectid")

.last("deleted").as("deleted");

listlist = new arraylist<>();

list.add(match(criteria));

list.add(groupoperation);

aggregation aggregation = newaggregation(list);

aggregation.withoptions(aggregationoptions.builder().allowdiskuse(true).build());

如上為簡單的分組查詢,是根據使用者id分組並查詢每個人的最好成績的科目資訊。

lookupoperation lookupoperation = lookupoperation.newlookup().

from(collection).

localfield("fileid").

foreignfield("fileid").

as("others");

criteria cri = criteria.where("workid").is(workid);

aggregationoperation match = aggregation.match(cri);

// 需要的字段

projectionoperation project = aggregation.project("_id","fileid", "name","others");

listoperations = new arraylist<>();

operations.add(lookupoperation);

operations.add(match);

operations.add(project);

aggregation aggregation = aggregation.newaggregation(operations);

aggregationresultsresults = resultmongotemplate.aggregate(aggregation, collection, map.class);

如上為簡單的聯表查詢,根據fileid欄位進行關聯,並將結果集放到others欄位中(這裡的others欄位是陣列,若關聯查詢到多條,則others裡是多條,與mysql不同)

projectionoperation為字段查詢篩選

將帶有請求欄位的文件傳遞到管道的下乙個階段。指定的字段可以是 importing 文件中的現有字段,也可以是新計算的字段。

以上兩個例子中我們使用aggregation.newaggregation(operations)是將所有的查詢條件聚合起來,一起進行查詢。

list中,可以將多個aggregationoperation條件一起使用。

一般我們在使用mongotemplate進行複雜查詢的時候,主要用到的就是aggregationoperation介面實現的類,我們此次只簡單的使用了groupoperationlookupoperation兩種,其他的使用方法可以看具體的官方文件。

mongoTemplate聚合操作

準備資料 customer 集合,資料型別如下 只是部分資料,資料量太多就不一一列出 1 通過mongotemplate.group方法 public groupbyresultsgroup string inputcollectionname,groupby groupby,classentity...

mongotemplate 動態query拼接

在用mongodb的時候進行分詞搜尋 使用ik分詞器對查詢條件進行分詞比如 男士9分休閒褲。使用mongotemplate 對分詞結果進行查詢。query query newquery criteria criteria newcriteria keywords是需要查詢的內容,對keywords進...

MongoTemplate聚合查詢

表結構 import org.springframework.data.domain.sort import org.springframework.data.domain.sort.direction import org.springframework.data.domain.sort.orde...