Spring Data JPA - Mon go DB: длина ответного сообщения 5502322 меньше максимальной длины сообщения - PullRequest
0 голосов
/ 18 февраля 2020

Код:

Interface::

@Query(value = "{'status': {$in: ?0} , 'date':{ $lte: ?1 }}")
List<Blog> findByStatusAndCurrentDateWithOrdering(List<String> status, Date date, Sort order);

Calling Class:

findByStatusAndCurrentDateWithOrdering(status, new Date(), Sort.by(Direction.DESC, "date")

Ошибка приложения, развернутого в Azure:

"status": 500,
    "error": "Internal Server Error",
    "message": "The reply message length 5502322 is less than the maximum message length 4194304; nested exception is com.mongodb.MongoIn
ternalException: The reply message length 5502322 is less than the maximum message length 4194304",

Содержимое в MongoDB включает в себя образ Base64, а также идентификатор, HTML. (и имеет только 11 или 12 строк)

Версия клиента Azure Mon go DB составляет <3.2.0. В то время как на локальном уровне это> 3,2

Какие изменения можно было бы сделать в приведенном выше коде, чтобы прочитать его кусками или ограничить, чтобы заставить его работать?

1 Ответ

1 голос
/ 18 февраля 2020

Вам нужно изменить это на:

db.blog.aggregate([
    {$match:{"status": {$in: status} , "date":{ $lte: date }}},
    {$sort:{"date":-1}}
],{allowDiskUse:true})

Редактировать:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
...

//Inside your `@Service` class, include:
@Autowired
private MongoTemplate mongotemplate;
...

MatchOperation filter = match(Criteria.where("status").in(status).and("date").lte(date));
SortOperation sort    = sort(Direction.DESC, "date")

Aggregation aggregation = newAggregation(filter, sort)
                             .withOptions(newAggregationOptions()
                             .allowDiskUse(true).build());
AggregationResults<Blog> result = mongoTemplate.aggregate(aggregation, mongoTemplate.getCollection(Blog.class), Blog.class);
List<Blog> blogs = result.getMappedResults();
...