mongoTemplate.updateFirst的排坑

最近用springboot自帶的MongoTemplate來做訂單模塊的一些操作,過程中發現裏面的坑,比如如下需求

根據訂單狀態修改時間最近的一條訂單狀態

那麼條件就是:1.訂單狀態 2.根據時間排序

然後我是這樣寫的

Query query = new Query();
query.addCriteria(Criteria.where("orderstatus").is(orderstatus));
query.with(Sort.by(Sort.Order.desc("ordertime")));
Update update = new Update().set("orderstatus", orderStatus);
mongoTemplate.updateFirst(query, update, Order.class);

mongoTemplate.find查詢出來的數據和預期的效果一樣,但是發現,mongoTemplate.updateFirst修改的第一條數據始終都只會修改列表中的第一條訂單,邏輯是沒有問題的,經過各種測試,最後得知,原來query.with(Sort.by(Sort.Order.desc("ordertime")));這個排序並沒有加到查詢條件裏面去

最後解決方案

先查詢,然後再修改

Query query = new Query();
query.addCriteria(Criteria.where("orderstatus").is(orderstatus));
query.with(Sort.by(Sort.Order.desc("ordertime")));
//獲取集合的第一條數據,然後再去修改
Order order= mongoTemplate.find(query, Order.class).get(0);
Query query2 = new Query();
query2.addCriteria(Criteria.where("orderid").is(order.getOrderId()));
Update update = new Update().set("orderstatus", orderStatus);
mongoTemplate.updateFirst(query2, update, Order.class);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章