Spring boot + MongoDB 整合 增删改查及聚合写法

import com.lhyt.mongodb.entity.UserEntity;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
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.data.mongodb.core.query.Update;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author zhangYQi
 */


@RestController
@RequestMapping(value = "practice")
public class PracticeMongoDBController {

    @Autowired
    private MongoTemplate mongoTemplate;


    /**
     * 在user表中新增一条数据,
     * ※ 注意字段名,返回值类型
     *
     * @return
     */
    @RequestMapping(value = "getUser")
    public UserEntity getUser() {
        UserEntity userEntity = new UserEntity();
        userEntity.setUserName("zyq+++");
        userEntity.setPassword("zyq123+");
        userEntity.setEmail("zyq111@qq");
        userEntity.setAge(777);
        userEntity.setName("zyq name ");
        UserEntity userEntity7 = mongoTemplate.save(userEntity, "user");
        return userEntity7;
    }


    /**
     * 查询user表中的所有数据
     *
     * @return
     */
    @RequestMapping(value = "queryAll")
    public List<UserEntity> query() {
        List<UserEntity> queryAll = mongoTemplate.findAll(UserEntity.class, "user");
        return queryAll;
    }


    /**
     * 根据条件查询
     */
    @RequestMapping(value = "queryFind")
    public List<UserEntity> queryFind() {
        Query query = Query.query(Criteria.where("userName").is("zyq888"));
        List<UserEntity> queryFinds = mongoTemplate.find(query, UserEntity.class, "user");
        return queryFinds;
    }


    /**
     * 根据条件查询,并删除查询结果
     * ※ mongoTemplate点的是findAndRemove 不是 findAllRemove
     */
    @RequestMapping(value = "findAndRemove")
    public UserEntity findAndRemove() {
        Query query = Query.query(Criteria.where("userName").is("zyq999"));
        UserEntity userEntity = mongoTemplate.findAndRemove(query, UserEntity.class, "user");
        return userEntity;
    }


    /**
     * 删除查询出来的这一行,返回删除成功数值1
     * 返回值类型:DeleteResult
     */
    @RequestMapping(value = "delete")
    public DeleteResult deleteUser() {
        Query query = Query.query(Criteria.where("userName").is("zyq00"));
        DeleteResult userEntity = mongoTemplate.remove(query, UserEntity.class, "user");
        return userEntity;
    }


    /**
     * 根据条件查行,有查询结果更改userName为zyq7890,有结果没字段不做操作
     *
     * @return
     */
    @RequestMapping(value = "modify")
    public UserEntity modify() {
        Query query = Query.query(Criteria.where("userName").is("zyq770"));
        Update update = new Update();
        update.set("userName", "zyq7890");
        UserEntity userEntity = mongoTemplate.findAndModify(query, update, UserEntity.class, "user");
        return userEntity;
    }


    /**
     * 更改查询结果的第一条
     */
    @RequestMapping(value = "findFirst")
    public UpdateResult findFirst() {
        Query query = Query.query(Criteria.where("userName").is("zyq888"));
        Update update = new Update();
        update.set("password", "zyq6789");
        UpdateResult userEntity = mongoTemplate.updateFirst(query, update, UserEntity.class, "user");
        return userEntity;
    }


    /**
     *根据条件查询,将查询结果中的password都改为zyq77788999
     */
    @RequestMapping(value = "findMulti")
    public UpdateResult findMulti() {
        Query query = Query.query(Criteria.where("userName").is("zyq888"));
        Update update = new Update();
        update.set("password", "zyq777888999");
        UpdateResult userEntity = mongoTemplate.updateMulti(query, update, UserEntity.class, "user");
        return userEntity;
    }


    /**
     * 聚合,分组
     * 条件和分组参数以逗号结尾,回显字段(最后一行没有逗号)
     * sum 求和, avg 分组平均值
     * @return
     */
    @RequestMapping(value = "aggregation")
    public List<Document>  aggregate(){
        Aggregation aggregation = Aggregation.newAggregation(
            Aggregation.match(Criteria.where("userName").is("zyq888")),    //条件
            Aggregation.group("userName").count().as("sumCount").sum("age").as("sumAge"), //分组参数
            Aggregation.project("userName", "sumCount", "sumAge") // 回显字段
        );
        AggregationResults<Document> userEntity = mongoTemplate.aggregate(aggregation, "user", Document.class);
        List<Document> aggregeter = userEntity.getMappedResults();
        return aggregeter;
    }

}

  聚合除求和以外,其他几种需求的写法(将上放sum更换成avg即可):

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值