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();
}
}