2

我正在尝试使用 原子地更新我的文档的一个值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 回答