mongodb聚合查询

聚合查询

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

@Component
public class Mongoaggregation {

  @Resource
  private MongoOperations mongoOperations;

  public void mongoaggregation (String collectionName) {
  
    Aggregation aggregation = Aggregation.newAggregation(
        Aggregation.match(new Criteria()
            .andOperator(
                Criteria.where("").gte("").lte(""),
                Criteria.where("").ne("").ne("")
            )
        ), Aggregation
            .group("","")
            .max("").as("")
            .min("").as("")
        , Aggregation.project("要查询的列1","2", "3","4"));
    AggregationResults<User> aggregate = mongoOperations.aggregate(aggregation, collectionName, User.class);
    return null;
  }
}

非聚合查询

import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.sgcc.eip.cable.common.dynamic.document.DynamicDocument;
import com.sgcc.eip.cable.common.dynamic.document.QueryParam;
import com.sgcc.eip.cable.common.dynamic.document.enums.MongoCondition;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.commons.collections.CollectionUtils;
import org.bson.Document;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

@Component
public class DynamicRepository {

    @Resource
    private MongoOperations mongoOperations;

    public Set<String> getExistingCollection() {
        return this.mongoOperations.getCollectionNames();
    }

    public MongoCollection<Document> createCollection(String collectionName) {
        return this.mongoOperations.createCollection(collectionName);
    }

    public MongoCollection<Document> getCollection(String collectionName) {
        return this.mongoOperations.collectionExists(collectionName) ? this.mongoOperations.getCollection(collectionName)
                : this.createCollection(collectionName);
    }

    public DynamicDocument insert(String collectionName, DynamicDocument data) {
        return this.mongoOperations.insert(data, collectionName);
    }

    public Long delete(List<QueryParam> queryParams, String collectionName) {
      Query query = new Query();
      if (CollectionUtils.isNotEmpty(queryParams)) {
        Criteria criteria = new Criteria();
        queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
        query.addCriteria(criteria);
      }
      DeleteResult remove = this.mongoOperations.remove(query,  collectionName);
      return remove.getDeletedCount();
    }

    public Long update(List<QueryParam> queryParams, Update update,String collectionName) {
      Query query = new Query();
      if (CollectionUtils.isNotEmpty(queryParams)) {
        Criteria criteria = new Criteria();
        queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
        query.addCriteria(criteria);
      }
      UpdateResult updateResult = this.mongoOperations.upsert(query, update, collectionName);
      return updateResult.getModifiedCount();
    }

    public <T> List<T> query(String collectionName, List<QueryParam> queryParams, Class<T> resultEntity) {
        Query query = new Query();
        if (CollectionUtils.isNotEmpty(queryParams)) {
            Criteria criteria = new Criteria();
            queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
            query.addCriteria(criteria);
        }
        return this.mongoOperations.find(query, resultEntity, collectionName);
    }

    public <T> List<T> queryPage(String collectionName, List<QueryParam> queryParams, Class<T> resultEntity, int pageSize, int pageNum) {
        Query query = new Query();
        if (CollectionUtils.isNotEmpty(queryParams)) {
            Criteria criteria = new Criteria();
            queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
            query.addCriteria(criteria);
            query.skip((pageNum - 1) * pageSize);
            query.limit(pageSize);
        }
        return this.mongoOperations.find(query, resultEntity, collectionName);
    }

    public long count(String collectionName, List<QueryParam> queryParams) {
        Query query = new Query();
        if (CollectionUtils.isNotEmpty(queryParams)) {
            Criteria criteria = new Criteria();
            queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
            query.addCriteria(criteria);
        }
        return this.mongoOperations.count(query, collectionName);
    }

    public <T> List<T> query(String collectionName, List<QueryParam> queryParams, Class<T> resultEntity, Sort sort, Integer count) {
        Query query = new Query();
        if (CollectionUtils.isNotEmpty(queryParams)) {
            Criteria criteria = new Criteria();
            queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
            query.addCriteria(criteria);
            if(null != sort){
                query.with(sort);
            }
            if(null != count){
                query.limit(count);
            }
        }
        return this.mongoOperations.find(query, resultEntity, collectionName);
    }


    public <T> T queryOne(List<QueryParam> queryParams, Class<T> resultEntity, String collectionName) {
        Query query = new Query();
        if (CollectionUtils.isNotEmpty(queryParams)) {
            Criteria criteria = new Criteria();
            queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
            query.addCriteria(criteria);
        }
        return this.mongoOperations.findOne(query, resultEntity, collectionName);
    }

    public <T> T findAndModify(List<QueryParam> queryParams, List<QueryParam> updateParams, Class<T> resultEntity, String collectionName) {
        Query query = new Query();
        if (CollectionUtils.isNotEmpty(queryParams)) {
            Criteria criteria = new Criteria();
            queryParams.forEach(queryParam -> MongoCondition.execute(criteria, queryParam));
            query.addCriteria(criteria);
        }
        Update update = new Update();
        if (CollectionUtils.isNotEmpty(queryParams)) {
            updateParams.forEach(updateParam -> {
                update.set(updateParam.getField(), updateParam.getValue());
            });
        }
        return this.mongoOperations.findAndModify(query, update, resultEntity, collectionName);
    }

    public Map<String, Object> insert(String collectionName, Map<String, Object> data) {
        return this.mongoOperations.insert(data, collectionName);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值