【问题标题】:How to fetch only selected mongo ids using spring data mongorepository method?如何使用 spring data mongorepository 方法仅获取选定的 mongo id?
【发布时间】:2021-03-09 18:51:47
【问题描述】:

我正在尝试这个,它一次只能用于一个 id。我想添加 id 列表。

public interface collectionRepository extends MongoRepository<collection, String> {
    
    List<collection> findByIds(List<UUID> id);
}

有人可以提出一些想法吗?提前感谢您的帮助!

【问题讨论】:

  • 你为什么不用findAllById
  • Findallbyid 在我传递一个 id 或选择所有 id 时有效。我只需要某些 ID。我有一个查询模板,我必须在其中给出从 Mongo 获取 id 的语法。正在寻找可以一次添加 id 列表的语法。我的模板如下所示: @JsonPropertyOrder( { "queryname", "collection", "field","datatype","startvalue"}) public class QueryModel1 { @JsonProperty("queryname") private String queryname; @JsonProperty("field") 私有字符串字段; @JsonProperty("datatype") 私有字符串数据类型; @JsonProperty("startvalue") 私有 UUID 起始值; }

标签: java mongodb spring-boot spring-data-mongodb mongorepository


【解决方案1】:

这适用于 POJO 类如下的情况:

public class User {

    private String id;
    private String firstName;
    private String lastName;
    // constructors (including default), get/set methods, etc.
}

并且,文档存储在集合 user 中,例如:

{ "_id" : ObjectId("604827bf8187ce707fb88681"), "firstName" : "John", "lastName" : "Doe", "_class" : "com.example.demo.User" }

具有通过提供的 id 列表获取对象的方法的存储库:

public interface UserRepository extends MongoRepository<User, String> {

    @Aggregation(pipeline = { " { '$match': { '_id': { '$in':  ?0  } } }" } )
    List<User> findByIdsIn(List<String> ids);
}

对存储库方法的调用:

List<String> inputIds = Arrays.asList("604827d13de5773133374acc", "604827617a40155f5111b9ff");
List<User> outputList = userRepository.findByIdsIn(inputIds);

outputList两个 文档匹配来自变量 inputIds 的 id。

【讨论】:

  • 我使用的是 Spring Data MongoDB v2.4 和 MongoDB v4.2。
猜你喜欢
  • 2017-03-22
  • 2018-10-05
  • 2021-08-27
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 2018-11-15
相关资源
最近更新 更多