2013-04-15 2 views
2

Я пытаюсь обновить одно значение моего документа атомарно, используя 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

Вы хотите, чтобы он запрашивал все значения, а не только те, которые больше 0? Если это так, я думаю, вы должны удалить '.gt (0)' –

+0

Нет, я просто хочу уменьшить запас, если его уже нет 0, поэтому я добавляю эти критерии в свой запрос. И я не знаю, как уменьшить значения с помощью Update(), в любом случае IncreaseStock и findAndDecreaseStock не работают, и мне нужно знать, почему – paul

+0

Я сам нашел проблему, мне пришлось добавить новый FindAndModifyOptions(). ReturnNew (true) в findAndModify – paul

ответ

0

FindAndModify вернет исходный документ после внесения в него обновления по умолчанию.

Если вы хотите вернуть измененный документ, вам необходимо передать его дополнительно . Кажется, вы уже нашли, что способ сделать это, добавив returnNew(true) в команду findAndModify.

Смежные вопросы