我正在尝试使用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的值。
知道我的代码有什么问题吗?
答案 0 :(得分:0)
FindAndModify会在对原始文档进行更新后返回原始文档。
如果您想要取回已修改的文档,则必须将可选的 new 选项传递给它。
您似乎已经发现,执行此操作的方法是将returnNew(true)
添加到findAndModify
命令。