You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot整合MongoDB按packageHolidayType过滤查询集合文档

你的过滤查询方案完全可行,基于Spring Boot + Spring Data MongoDB可以快速实现需求,具体实现步骤如下:

前置依赖准备

确保项目已经引入Web和MongoDB的官方Starter依赖,Maven配置示例:

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

同时在项目配置文件中完成MongoDB连接地址、对应数据库名的配置即可。

1. 定义集合对应的实体类

创建和packageholiday集合映射的实体类:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;

@Document(collection = "packageholiday")
public class PackageHoliday {
    @Id
    private String id;
    private List<String> packageHolidayType;
    // 省略其他业务字段、getter/setter方法
}
2. 实现数据访问层

创建Repository接口继承MongoRepository,利用Spring Data的方法名派生查询能力,不需要手写MongoDB查询语句:

import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;

public interface PackageHolidayRepository extends MongoRepository<PackageHoliday, String> {
    // 自动生成查询:匹配packageHolidayType数组中包含指定type值的所有文档
    List<PackageHoliday> findByPackageHolidayTypeContaining(String type);
}

说明:针对数组类型字段,Containing关键字会被自动翻译为MongoDB原生的数组包含匹配语法,和手写{ packageHolidayType: "目标值" }的原生查询效果完全一致,没有额外性能开销。

3. 实现REST接口

编写Controller层,暴露你需要的两个GET接口:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;

@RestController
public class TourController {
    @Resource
    private PackageHolidayRepository packageHolidayRepository;

    @GetMapping("/getEscortedTours")
    public List<PackageHoliday> getEscortedTours() {
        return packageHolidayRepository.findByPackageHolidayTypeContaining("escortedTours");
    }

    @GetMapping("/getIndepedentTours")
    public List<PackageHoliday> getIndepedentTours() {
        return packageHolidayRepository.findByPackageHolidayTypeContaining("indepedentTours");
    }
}
方案验证说明
  • 这个实现完全匹配你的需求:packageHolidayType是数组字段时,上述查询只会返回数组中包含对应类型值的文档,不会出现漏查、错查问题。
  • 如果集合数据量较大,可以给packageHolidayType字段创建普通索引,能大幅提升查询速度。
  • 后续如果新增度假类型,不需要修改Repository层代码,直接复用现有查询方法即可,也可以按需把两个接口合并为带类型参数的单接口,减少重复代码。

内容的提问来源于stack exchange,提问作者devnoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:54:20