MongoTemplate関連付け、ページング、集約

4026 ワード

関連クエリー
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のようにグループ化された結果セットである.