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

Spring Data Repository中通过Label ID查询关联Note的方法

如何通过Label的ID查询所有关联的Note?

我定义了两个MongoDB实体类:

@Document("note")
public class Note {
    // 其他字段...
    @DBRef(lazy = true)
    private List<Label> labels = new ArrayList<>();
}

@Document("label")
public class Label {
    @Id
    private String id;
    private String name;
}

我尝试了以下查询但未生效:

@Query(value = "{ 'labels.$id': ?0) }", fields = "{'_id': 1}")

Slice findNotesByLabelName(String id, Pageable pageable);


解决方法

方法一:修正@Query语法并规范方法定义

你的查询语句里多了一个多余的右括号,导致MongoDB无法解析,同时方法名和参数含义不匹配,调整后如下:

@Query(value = "{ 'labels.$id': ?0 }", fields = "{'_id': 1}")
Slice<Note> findNotesByLabelId(String labelId, Pageable pageable);

方法二:使用Spring Data派生查询(更简洁)

Spring Data MongoDB支持自动解析方法名生成查询,针对List的场景,直接用ByLabelsId即可匹配Label的ID:

Slice<Note> findByLabelsId(String labelId, Pageable pageable);

原查询失效原因

  1. 原@Query的value中多了一个右括号),导致查询语法错误;
  2. 方法名findNotesByLabelName暗示按Label的name字段查询,但参数传入的是ID,命名混淆也会影响Spring Data的解析逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:24:22