Spring Data MongoDB 存储库。如何通过 ID 列表进行搜索?

5

我有以下类!

public class Task{
    ObjectId id;
    String title;
    String description;

    /* Getters and Setters removed for brevity */
}

我将提供以下的mongoRepository类,非常简单:

public interface TaskRepository extends MongoRepository<Task, String> {

}

正如您所看到的,我尚未尝试扩展这个类 - 如果我想要一个查找方法,在那里我可以将一个id列表交给它,并获取相应任务的列表,我该做什么?


在适当的findBy方法中使用@Query("{ '_id': '$in': ?0 }')?目前没有基于mongoreposity的项目,但这会给你一个很好的开始寻找的地方。 - Neil Lunn
该死,我尝试过类似的东西,但一直无法让它正常工作。不过,至少现在知道我走在正确的道路上了。 - MickeyThreeSheds
请参考http://www.baeldung.com/spring-data-mongodb-tutorial和https://github.com/eugenp/tutorials/blob/master/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java获取更多详细信息。 - harshavmb
@NeilLunn,我尝试了你的方法,但生成的语句只包含第一个idfind using query: { "_id" : { "$in" : [{ "$oid" : "5f9c88676b7c1372fc31474f"}]}} fields: Document{{logo=0}} 对我来说,findAllById不是一个选项,因为我只想选择特定的字段而不是整个文档。 - andy
@NeilLunn,我找到了查询中的问题:"{ '_id' : {'$in' : [?0] } }"。我必须省略方括号:[ ]。正确的写法是:"{ '_id' : {'$in' : ?0 } }" - andy
2个回答

6
MongoRepository继承的CrudRepository具有一个findAll方法,该方法接受一个Itereable<ID>参数。我认为这正是您要找的内容。请注意,在最新的里程碑版本中,它被重命名为findAllById

3
您可以创建一个自定义查询方法,用于搜索_id值的数组:
  @Query(value = "{ '_id' : {'$in' : ?0 } }", fields = "{ 'description': 0 }")
  Iterable<Task> findAllThin(Iterable<String> ids);

在这种情况下,它只返回字段idtitle。(注:Neil Lunn 帮助我找到了答案。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接