springboot + mongdb 基本操作

本文档展示了如何在Spring Boot应用中集成MongoDB,包括添加依赖、配置数据库连接、定义实体类以及实现CRUD操作。通过MongoTemplate进行数据的增删改查,并利用聚合操作进行复杂查询,如分页、条件筛选等。
摘要由CSDN通过智能技术生成

1、引入 mongdb 依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2、配置mongdb链接

server:
  port: 10000

# mongdb
spring:
  data:
    mongodb:
      #认证的库
      # authentication-database: admin
      #操作的库
      database: kou
      # username: user
      # password: 123456
      host: localhost
      port: 27017

3、 创建实体

package com.kou.test.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.Date;

@Data
@Document(collection = "user")
public class User {

    @Id
    private Long userId;

    private String userName;

    private String nickName;

    private Integer age;

    private Date createTime;

}



package com.kou.test.entity;

import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;
import java.util.Date;

@Data
@Document(collection = "score")
public class Score implements Serializable {

    private String id;

    private Long userId;

    private Integer score;

    private Date createTime;

    private Date updateTime;

}

4、执行CRUD

package com.kou.test.service.impl;

import com.kou.test.entity.User;
import com.kou.test.service.IUserService;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.*;
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.Service;

import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public User add(User user) {
        user.setCreateTime(new Date());
        return mongoTemplate.insert(user);
    }

    @Override
    public int update(User user) {
        Query query = new Query(Criteria.where("userId").is(user.getUserId()));

        Update update = new Update();
        if (StringUtils.isNotBlank(user.getNickName())) {
            update.set("nickName", user.getNickName());
        }
        if (null != user.getAge()) {
            update.set("age", user.getAge());
        }
        UpdateResult result = mongoTemplate.updateFirst(query, update, User.class);
        return 1;
    }

    @Override
    public User query(Long userId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("userId").is(userId));
        return mongoTemplate.findOne(query, User.class);
    }

    @Override
    public List<User> list() {
        return mongoTemplate.findAll(User.class);
    }

    @Override
    public int delete(Long userId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("userId").is(userId));
        DeleteResult result = mongoTemplate.remove(query, User.class);
        return 0;
    }

    /**
     * 分页查询
     *
     * @param page
     * @param pageSize
     * @param nickName
     * @return
     */
    @Override
    public List<User> page(Integer page, Integer pageSize, String nickName) {
        Query query = new Query();
        // 分页
        query.limit(pageSize);
        query.skip((page - 1) * pageSize);
        List<User> userList = mongoTemplate.find(query, User.class);
        return userList;
    }

    /**
     * 通过id查询
     *
     * @param userId
     * @return
     */
    @Override
    public Map info(Long userId) {
        LookupOperation lookupOperation = LookupOperation.newLookup()
                //从表名
                .from("score")
                //主表关联字段
                .localField("_id")
                //从表关联字段
                .foreignField("userId")
                //查询结果名
                .as("userInfo");

        // 查询主表
        Criteria criteriaMain = Criteria.where("_id").is(userId);
        AggregationOperation matchMain = Aggregation.match(criteriaMain);

        // 选择需要的字段
        ProjectionOperation project = Aggregation.project("_id", "userName", "userInfo.id", "userInfo.score");

        // Aggregation.unwind() 将字迹数组转为单一对象
        Aggregation aggregation = Aggregation.newAggregation(lookupOperation, matchMain, Aggregation.unwind("userInfo"));
        List<Map> result = mongoTemplate.aggregate(aggregation, "user", Map.class).getMappedResults();
        if (null != result && result.size() > 0) {
            return result.get(0);
        }
        return Collections.EMPTY_MAP;
    }

    /**
     * 条件查询
     *
     * @param score 积分
     * @param age   年龄
     * @return 结果
     */
    @Override
    public List<Map> queryList(Integer score, Integer age) {

        LookupOperation lookupOperation = LookupOperation.newLookup()
                .from("score")
                .localField("_id")
                .foreignField("userId")
                .as("score");

        // 添加查询条件
        Criteria criteria = new Criteria();
        if (null != score) {
            criteria.and("score.score").gte(score);
        }
        if (null != age) {
            criteria.and("age").gte(age);
        }

        MatchOperation match = Aggregation.match(criteria);

        Aggregation aggregation = Aggregation.newAggregation(lookupOperation, match, Aggregation.unwind("score"));

        return mongoTemplate.aggregate(aggregation, "user", Map.class).getMappedResults();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值