MongoTemplate简单操作mongdb
查出的数据

效果图

修改操作后的效果图

pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.java</groupId>
<artifactId>redis-service</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 继承 Spring Boot 父 POM,管理 Spring Boot 依赖版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/> <!-- 从仓库查找父 POM -->
</parent>
<dependencies>
<!--springboot整合mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<!--引入junit单元测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
代码部分
package com.java;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class,args);
}
}
package com.java;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
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.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
/**
* @Description:
* @Author: tutu-qiuxie
* @Create: 2026/2/4 1:32
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class MongoTest {
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void test003(){
System.out.println("当前数据库:" + mongoTemplate.getDb().getName());
mongoTemplate.getCollectionNames()
.forEach(name -> System.out.println("集合:" + name));
List<Document> list = mongoTemplate
.getCollection("sys_log")
.find()
.limit(10)
.into(new ArrayList<>());
list.forEach(doc -> System.out.println(doc.toJson()));
System.out.println("统计每个 methodName 被调用了多少次");
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("methodName")
.count().as("total")
);
AggregationResults<Document> results =
mongoTemplate.aggregate(aggregation, "sys_log", Document.class);
results.getMappedResults()
.forEach(d -> System.out.println(d.toJson()));
//看哪个方法操作了哪个 key 最多
Aggregation aggregation1 = Aggregation.newAggregation(
Aggregation.group("methodName", "key")
.count().as("total")
);
AggregationResults<Document> results1 =
mongoTemplate.aggregate(aggregation1, "sys_log", Document.class);
results1.getMappedResults().forEach(d -> {
System.out.println(d.toJson());
});
System.out.println("这个方法主要操作了哪些 key?");
Aggregation aggregation2 = Aggregation.newAggregation(
Aggregation.match(
Criteria.where("methodName").is("addPublicMemo")
),
Aggregation.group("key")
.count().as("total")
);
AggregationResults<Document> results2 =
mongoTemplate.aggregate(aggregation2, "sys_log", Document.class);
results2.getMappedResults()
.forEach(d -> System.out.println(d.toJson()));
System.out.println("方法调用排行榜");
Aggregation aggregation3 = Aggregation.newAggregation(
Aggregation.group("methodName")
.count().as("total"),
Aggregation.sort(Sort.Direction.DESC, "total"),
Aggregation.limit(5)
);
mongoTemplate.aggregate(aggregation3, "sys_log", Document.class)
.getMappedResults()
.forEach(d -> System.out.println(d.toJson()));
System.out.println("把 _id 拆出来");
Aggregation aggregation4 = Aggregation.newAggregation(
Aggregation.group("methodName")
.count().as("total"),
Aggregation.project()
.and("_id").as("methodName")
.and("total").as("count")
.andExclude("_id")
);
mongoTemplate.aggregate(aggregation4, "sys_log", Document.class)
.getMappedResults()
.forEach(d -> System.out.println(d.toJson()));
System.out.println("统计 15:00 ~ 15:03 的调用数");
Aggregation aggregation5 = Aggregation.newAggregation(
Aggregation.match(
Criteria.where("time")
.gte("2025-06-18 15:00:00")
.lte("2025-06-18 15:03:00")
),
Aggregation.group("methodName")
.count().as("total")
);
mongoTemplate.aggregate(aggregation5, "sys_log", Document.class)
.getMappedResults()
.forEach(d -> System.out.println(d.toJson()));
}
}
package com.java;
import com.mongodb.client.FindIterable;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
/**
* @Description:
* @Author: tutu-qiuxie
* @Create: 2026/2/4 1:47
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class MongoUpdateTest {
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void test004(){
FindIterable<Document> documents = mongoTemplate
.getCollection("sys_log")
.find();
//插入一条日志
// Document doc = new Document();
// doc.put("methodName", "addPublicMemo");
// doc.put("key", "memoContent");
// doc.put("arg", "11");
// doc.put("time", "2025-06-18 15:03:21");
//
// mongoTemplate
// .getCollection("sys_log")
// .insertOne(doc);
//批量插入
// List<Document> docs = new ArrayList<>();
//
// for (int i = 0; i < 5; i++) {
// docs.add(new Document()
// .append("methodName", "getAllPum")
// .append("key", "memoSign")
// .append("arg", String.valueOf(i))
// .append("time", "2025-06-18 15:05:00")
// );
// }
//
// mongoTemplate
// .getCollection("sys_log")
// .insertMany(docs);
//把 getAllPum 的 key 改成 memoSignV2
// mongoTemplate.getCollection("sys_log")
// .updateMany(
// Filters.eq("methodName", "getAllPum"),
// Updates.set("key", "memoSignV2")
// );
//同时修改多个字段
// mongoTemplate.getCollection("sys_log")
// .updateMany(
// Filters.eq("methodName", "addPublicMemo"),
// Updates.combine(
// Updates.set("key", "memoContentV2"),
// Updates.set("arg", "99")
// )
// );
List<Document> list = mongoTemplate
.getCollection("sys_log")
.find()
.limit(10)
.into(new ArrayList<>());
list.forEach(doc -> System.out.println(doc.toJson()));
}
}
配置文件
mongodb.url=ip:端口号
spring.data.mongodb.uri=mongodb://用户:密码@${mongodb.url}/数据库
浙公网安备 33010602011771号