【问题标题】:Spring + MongoDB - MongoTemplate + Criteria QuerySpring + MongoDB - MongoTemplate + Criteria 查询
【发布时间】:2019-07-27 20:50:40
【问题描述】:

我正在使用 Spring Boot + MongoDB。我需要根据一些标准查询数据库,我的方法如下所示:

@Override
    public List<MyCollection> findBuyByCriteria(Request request) {
        Query search = new Query();
        search.addCriteria(Criteria.where("ItmId").in(request.getItmIds()));
        return mongoTemplate.find(search, MyCollection.class);
    }

我面临的问题是: 在行

search.addCriteria(Criteria.where("ItmId").in(request.getItmIds()));

request.getItmIds 有 100 万个 Id,因此我遇到了异常

org.bson.BsonMaximumSizeExceededException: 文档大小 46282052 大于最大值 16793600

谁能帮我解决这个问题?

【问题讨论】:

  • request.getItmIds() 来自哪里?不能分页让你不一次发送100万个ID吗?
  • 不能分页让你不一次发送100万个ID吗? - 这正是我卡住的地方.. MongoDB 查询可以分页或其他什么..
  • 这种方法的分页是一个挑战。有一种可能的解决方案来实现分页,但要权衡的是对数据库进行两次调用。

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


【解决方案1】:

如果您使用的是 Spring Data JPA,您可以执行以下操作: findBySomeField(String someField)

如果您有更复杂的查询,您实际上可以使用 JPQL 并编写自定义查询。

@Query(value = "SELECT o.* from SomeObject o WHERE :someField IS NULL OR o.someField = :somefield)
public findBySomeField(@Param("someField") String someField);

【讨论】:

  • 问题中提到他使用的是MongoDB,而不是JPA。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多