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

Spring Boot MongoDB Repository如何实现嵌套对象字段的findBy查询

Spring Data MongoDB 嵌套字段查询解决方案

核心原理

Spring Data MongoDB 查询嵌套字段时,需要按照实体类的嵌套属性层级明确指定字段路径,不会自动递归扫描所有嵌套类的同名字段。你之前直接写findByTruckId无法生效,是因为框架默认只会在根实体TruckModelDTO中查找truckId属性,找不到对应字段就会抛出异常或返回空结果。

你场景对应的属性嵌套层级如下:

  • 根实体TruckModelDTO → 嵌套属性testDTO(TestDTO类型)
  • TestDTO → 嵌套属性truckDTO(TruckDTO类型)
  • TruckDTO → 目标查询字段truckId

解决方案1:按层级拼接方法名(衍生查询)

按照「上层属性名+下层属性名」的规则拼接方法名即可,为了避免属性命名歧义,也可以用下划线_分隔不同层级的属性:

// 方式1:驼峰拼接(无命名歧义时可用)
List<TruckModelDTO> findByTestDTOTruckDTOTruckId(String truckId);

// 方式2:下划线分隔(更清晰,避免属性名冲突)
List<TruckModelDTO> findByTestDTO_TruckDTO_TruckId(String truckId);

解决方案2:使用@Query注解自定义查询(更简洁)

如果觉得方法名过长不好维护,可以直接用@Query注解指定MongoDB原生查询语句,方法名可以自定义:

@Query("{ 'testDTO.truckDTO.truckId' : ?0 }")
List<TruckModelDTO> findByTruckId(String truckId);

这里的?0对应方法的第一个入参truckId,查询语句里的字段路径和MongoDB文档的嵌套结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:27:05