我正在尝试使用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类型,当我在find中使用一个条件时,我可以看到:
Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
return mongoTemplate.findOne(query, OfferConfiguration.class);它只返回股票大于0的值。
你知道我的代码出了什么问题吗?
发布于 2013-04-28 08:19:46
默认情况下,FindAndModify会在对原始文档进行更新后返回原始文档。
如果您想取回修改后的文档,则必须向其传递可选的新选项。您似乎已经找到了这样做的方法,即在findAndModify命令中添加returnNew(true)。
https://stackoverflow.com/questions/16019808
复制相似问题