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介面實現的類,我們此次只簡單的使用了groupoperation與lookupoperation兩種,其他的使用方法可以看具體的官方文件。
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...