MongoTemplate関連付け、ページング、集約
4026 ワード
関連クエリー
1対多の構造で,最終結果は1つのjsonリストにあり,各集合1には1つの集合2のリストがある.
ページングクエリ
ページングツール
検索
ソートとページング、withそのステップはmongoのskipとlimitをつなぎました.
集約関数の使用
統計クリック数と課金の小例
ステップ1クエリー条件の設定
ステップ2パケット数、addToSetパケットクエリー
戻り結果セットはクラスに対応していないため、タイプはDocumentであり、AggregationResultsはmongoのjsonテーブルであり、listのようにグループ化された結果セットである.
1対多の構造で,最終結果は1つのjsonリストにあり,各集合1には1つの集合2のリストがある.
/*
*
* , ,
*/
public List selectTwoCol(String col1,String word,String word2){
LookupOperation lookupOperation=LookupOperation.newLookup().from(col1).localField(word).foreignField(word2).as("col");
//
Aggregation aggregation = Aggregation.newAggregation(lookupOperation);
List results = mongoTemplate.aggregate(aggregation, "AddMoney", Document.class).getMappedResults();
//
List list=new ArrayList<>();
for (Document b:results){
JSONObject jsonObject = JSONUtil.parseObj(b.toJson());
list.add(jsonObject);
}
return list;
}
ページングクエリ
ページングツール
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import java.io.Serializable;
/**
* @author
*/
public class MongoPageable implements Serializable, Pageable {
private static final long serialVersionUID = 1L;
//
private Integer pagenumber = 1;
//
private Integer pagesize = 10;
//
private Sort sort;
public MongoPageable(Integer pagenumber, Integer pagesize, Sort sort) {
this.pagenumber = pagenumber;
this.pagesize = pagesize;
this.sort = sort;
}
@Override
public Pageable first() {
// TODO Auto-generated method stub
return null;
}
@Override
public long getOffset() {
// TODO Auto-generated method stub
return (pagenumber - 1) * pagesize;
}
@Override
public int getPageNumber() {
// TODO Auto-generated method stub
return pagenumber;
}
@Override
public int getPageSize() {
// TODO Auto-generated method stub
return pagesize;
}
@Override
public boolean hasPrevious() {
// TODO Auto-generated method stub
return false;
}
@Override
public Pageable next() {
// TODO Auto-generated method stub
return null;
}
@Override
public Pageable previousOrFirst() {
// TODO Auto-generated method stub
return null;
}
@Override
public Sort getSort() {
// TODO Auto-generated method stub
return sort;
}
}
検索
ソートとページング、withそのステップはmongoのskipとlimitをつなぎました.
public Page paginationQuery(Integer pageNum) {
Query query = new Query();
Sort sort = new Sort(Sort.Direction.DESC, "money");
// , ,
MongoPageable pageable = new MongoPageable(pageNum,5,sort);
//
Long count = mongoTemplate.count(query, AddMoney.class);
//
List list = mongoTemplate.find(query.with(pageable), AddMoney.class);
//
Page pagelist = new PageImpl<>(list, pageable, count);
return pagelist;
}
集約関数の使用
統計クリック数と課金の小例
Criteria criteria = Criteria.where("id").is(id).and("date").is(date);
TypedAggregation agg = Aggregation.newAggregation(CostTidy.class,
Aggregation.match(criteria),
Aggregation.group("hour")
.sum("point").as("convertCntAll")
.addToSet("browsedMoney").as("browsedMoneyTotal")
.addToSet("convertMoney").as("convertMoneyTotal")
);
AggregationResults result = mongoTemplate.aggregate(agg, "cost", Document.class);
ステップ1クエリー条件の設定
ステップ2パケット数、addToSetパケットクエリー
戻り結果セットはクラスに対応していないため、タイプはDocumentであり、AggregationResultsはmongoのjsonテーブルであり、listのようにグループ化された結果セットである.