2

を使用してドキュメントの 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 より大きい値のみを返します。

私のコードで何が間違っているのですか?

4

1 に答える 1

0

FindAndModifyは、デフォルトで更新を行った後に元のドキュメントを返します。

変更されたドキュメントを元に戻したい場合は、オプションの新しいオプションを渡す必要があります。それを行う方法はreturnNew(true)findAndModifyコマンドに追加することであることがすでにわかっているようです。

于 2013-04-28T00:19:46.460 に答える