1.数据库中的数据
2.pom文件添加架包
springboot版本 2.2.2.RELEASE
<!--mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
3.yml文件设置mongoDB数据库的地址信息
spring:
data:
mongodb:
host: 127.0.0.1
port: 27017
database: myTest
4.使用MongoTemplate来进行数据库操作
package com.kittlen.cloud.controller;
import com.kittlen.cloud.entities.People;
import com.mongodb.client.result.UpdateResult;
import entities.Result;
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 javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author kittlen
* @version 1.0
* @date 2021/9/15 0015
*/
@RestController
@RequestMapping("/test")
public class TestController {
@Resource
MongoTemplate mongoTemplate;
/**
* 如果不指定collectionName的话默认使用传入的对象的类名(首字母小写-驼峰命名)
*
* @return
*/
@RequestMapping("/add")
public Result add() {
People people = new People();
people.setName("王五");
people.setAge("11");
People insert = mongoTemplate.insert(people, "mytable");
return Result.ok(insert);
}
@RequestMapping("/update")
public Result update() {
Query query = new Query();
query.addCriteria(Criteria.where("name").is("王五").and("age").is("11"));
Update update = new Update();
update.set("name", "王五");
update.set("age", "12");
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, "mytable");
return Result.ok(updateResult.getModifiedCount());
}
@RequestMapping("/remove")
public Result remove() {
Query query = new Query();
query.addCriteria(Criteria.where("name").is("王五").and("age").is("11"));
// DeleteResult mytable = mongoTemplate.remove(query, "mytable");
List<Object> mytable = mongoTemplate.findAllAndRemove(query, "mytable");
return Result.ok(mytable);
}
/**
* 获取数据库中的所有文档集合
*
* @return
*/
@RequestMapping("/collectionNames")
public Result collectionNames() {
Set<String> set = mongoTemplate.getCollectionNames();
return Result.ok(set);
}
/**
* 根据条件查询一条数据
*
* @return
*/
@RequestMapping("/findOne")
public Result findOne() {
Query query = new Query();
query.addCriteria(Criteria.where("age").is("11"));
People people = mongoTemplate.findOne(query, People.class, "mytable");
return Result.ok(people);
}
/**
* 根据条件查询列表数据
*
* @return
*/
@RequestMapping("/find")
public Result find() {
Query query = new Query();
query.addCriteria(Criteria.where("age").is("11"));
return Result.ok(mongoTemplate.find(query, People.class, "mytable"));
}
//db.mytable.aggregate({ "$match" : { "age" : { "$lt" : 100, "$gte" : 11}}}, { "$group" : { "_id" : "$age", "ageSum" : { "$sum" : "$age"}}})
@RequestMapping("/aggregate")
public Result aggregate() {
Criteria cri = new Criteria("age").lt(100).gte(11);
Aggregation ag = Aggregation.newAggregation(
Aggregation.match(cri),
Aggregation.group("age").sum("age").as("ageSum")
);
AggregationResults<Map> mytable = mongoTemplate.aggregate(ag, "mytable", Map.class);
return Result.ok(mytable.getMappedResults());
}
}
备注
添加的数据多了个_class字段
修改MappingMongoConverter
package com.kittlen.cloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.convert.CustomConversions;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
/**
* @author kittlen
* @version 1.0
* @date 2021/9/15 0015
*/
@Configuration
public class MongodbConfig {
/**
* 用于删除添加的数据中多添加的_class字段
*
* @param factory
* @param context
* @param conversions
* @return
*/
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory,
MongoMappingContext context, CustomConversions conversions) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
try {
mappingMongoConverter.setCustomConversions(beanFactory.getBean(MongoCustomConversions.class));
} catch (NoSuchBeanDefinitionException ignore) {
throw ignore;
}
// remove _class field
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
mappingConverter.setCustomConversions(conversions);
return mappingConverter;
}
}