存储库函数 returns 空列表

Repository function returns empty list

我有这个存储库功能:

public interface CommunityRepository extends MongoRepository<Community,String> {
    @Query(value="{ 'builder_id' : 1}", fields="{ 'name' : 1, 'description' : 1, 'slogan' : 1, 'address' : 1, 'numberOfHouses' : 1}")
    List<Community> findAllByBuilderId(List<String> builderId);
}

这里是我从服务中调用它的方式:

List<String> builderId = new ArrayList<String>();
builderId.add("6127db1d94ae73194a990444");
builderId.add("5f9852ce93834b1fc01f6573");
builderId.add("602db8e7b05b804313f9ft67");

List<Community> communities = underTest.findAllByBuilderId(builderId);

这里是社区 class:

@Data
@Document("communities")
@Slf4j
public class Community {
    @Id
    private String id = null;
    @NotBlank(message = "Must not be blank")
    @Size(max = 50, message = "Max length is 50 characters")
    private String name;
    @Size(max = 400, message = "Max length is 200 characters")
    private String description;
    private List<String> tags;
    @Field("builder_id")
    @Pattern(regexp = "[a-fA-F0-9]{24}", message = "Wrong id format")
    private String builderId;
}

社区列表始终为空,但有一些项目与之相关builder id

知道为什么社区列表总是空的吗?

您没有在查询中传递参数,您只有静态值 1。

{ 'builder_id' : 1} 表示静态搜索 builder_id = 1

你想要的是 { 'builder_id' : { $in: ?0 } } 你说的 builder_id 必须是你的方法提供的第一个参数中包含的元素之一(索引从0开始)所以它是 ?0

所以你查询到底一定是

  @Query(value="{ 'builder_id' : { $in: ?0 } } )
    List<Community> findAllByBuilderId(List<String> builderId);

如果不接受,请尝试 {$in: [?0]}