我正在尝试使用 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 的值。
知道我的代码有什么问题吗?
最佳答案
FindAndModify默认情况下,更新后会返回原始文档。
如果您想取回修改后的文档,您必须将可选的 new 选项传递给它。
您似乎已经找到了将 returnNew(true)
添加到 findAndModify
命令的方法。
关于java - Inc/dec mongotemplate,原子地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019808/