Я пытаюсь обновить одно значение моего документа атомарно, используя findAndModify
, который согласно моему чтению является атомарным в том же документе. Согласно моему модулю, значения не изменяются.Inc/dec mongotemplate, atomically
Я использую mongoTemplate в Java, и мой код выглядит
public OfferConfiguration IncreaseStock(OfferConfiguration offerConfiguration) {
Query query = new Query(Criteria.where("_id").is(offerConfiguration.getId()));
Update update = new Update().inc("stock", 1);
return mongoTemplate.findAndModify(query, update, OfferConfiguration.class);
}
public OfferConfiguration findAndDecreaseStock(String offerId) {
Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
Update update = new Update().inc("stock", -1);
return mongoTemplate.findAndModify(query, update, OfferConfiguration.class);
}
Stock имеет тип Long, и я могу видеть, что, когда я использую критерии в находке:
Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
return mongoTemplate.findOne(query, OfferConfiguration.class);
Он возвращает только значения, запас которых больше 0.
Любая идея, что не так в моем коде?
Вы хотите, чтобы он запрашивал все значения, а не только те, которые больше 0? Если это так, я думаю, вы должны удалить '.gt (0)' –
Нет, я просто хочу уменьшить запас, если его уже нет 0, поэтому я добавляю эти критерии в свой запрос. И я не знаю, как уменьшить значения с помощью Update(), в любом случае IncreaseStock и findAndDecreaseStock не работают, и мне нужно знать, почему – paul
Я сам нашел проблему, мне пришлось добавить новый FindAndModifyOptions(). ReturnNew (true) в findAndModify – paul