を使用してドキュメントの 1 つの値をアトミックに更新しようとしていますがfindAndModify
、これは私の読みによると、同じドキュメント内でアトミックです。私の単体テストによると、値は変更されていません。
JavaでmongoTemplateを使用していますが、コードは次のようになります
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 より大きい値のみを返します。
私のコードで何が間違っているのですか?