Inc / dec mongotemplate,原子

时间:2013-04-15 16:06:40

标签: java mongodb

我正在尝试使用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);
    }

股票类型为Long,我可以看到当我在find中使用条件时:

  Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
  return mongoTemplate.findOne(query, OfferConfiguration.class);

仅返回库存大于0的值。

知道我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

默认情况下,

FindAndModify会在对原始文档进行更新后返回原始文档。

如果您想要取回已修改的文档,则必须将可选的 new 选项传递给它。 您似乎已经发现,执行此操作的方法是将returnNew(true)添加到findAndModify命令。