MongoTemplate简单操作mongdb

查出的数据

image

 效果图

image

修改操作后的效果图

image

 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}/数据库

  

 

posted @ 2026-02-04 01:53  板凳哲学家  阅读(1)  评论(0)    收藏  举报