#mongodb #spring-data-mongodb
#mongodb #spring-data-mongodb
Вопрос:
Мне нужна помощь, у меня в коллекции Mongo-DB 30 000 записей. Я хочу извлекать по одному документу за раз, а затем снова выполнять тот же процесс. Я использую Spring Boot
Подобный запрос :-
select top 1 * from StockPrice
where _id > 00017a813392410dac614961c70c80a8
order by _id;
и в следующий раз, когда новый идентификатор будет установлен в разделе where для сравнения
Комментарии:
1. Пожалуйста, опубликуйте несколько сценариев, например, как вы фильтруете свои записи в запросе или у вас нет условий фильтрации, но вы хотите получать результат из базы данных один за другим?
2. @Mani, пожалуйста, уточните вопрос
Ответ №1:
Я нашел свое решение, используя эту логику метода для приведенного выше запроса. Надеюсь, это кому-то поможет
private @Autowired StockPriceRepository stockPriceRepo;
private @Autowired MongoTemplate mongoTemplate;
private static String _id = "";
private static volatile Boolean isFirstRead = false;
public StockPrice fetchUuIdAndDate(Integer limit) {
logger.info("Fetch UuId And Date :- (limit : " limit ")");
Query query = new Query();
query.fields().include("date");
query.with(new Sort(Sort.Direction.ASC, "_id"));
query.limit(limit == 1 ? limit: 1);
StockPrice stockPrice;
if(!isFirstRead) { // only 1 time
stockPrice = this.mongoTemplate.findOne(query, StockPrice.class);
_id = stockPrice.getUuId();
isFirstRead = true;
} else {
query.addCriteria(Criteria.where("_id").gt(_id));
stockPrice = this.mongoTemplate.findOne(query, StockPrice.class);
_id = stockPrice.getUuId();
}
logger.info("Query :- " query.toString());
return stockPrice;
}