首页 > 解决方案 > 无法更新 MongoDb Spring Boot 中的唯一字段

问题描述

我有一个集合如下。

public class MyClass {
    @Id
    private String id;
    @Indexed(unique=true)
    private int priority;
}

我希望从数据库中的某个点增加所有优先级。例如,我有优先级为 1、2、3....10 的记录。我想从优先级为 3 的点更新所有记录为 1,2,4,5...,10,11。我希望用下面的代码来做到这一点。

var query = new Query();
query.addCriteria(Criteria.where("priority").gte(2)).with(Sort.by(Sort.Direction.DESC, "priority"));
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.ORDERED, MyClass.class);
var update = new Update().inc("priority", 1);
bulkOps.updateMulti(query, update);
bulkOps.execute();

但是,我收到此错误。

org.springframework.data.mongodb.BulkOperationException:服务器本地主机上的批量写入操作错误:27017。写入错误:[BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: myClass index: priority dup key: { priority: 4 }', details={}}]。

我认为按 DESC 排序应该可以解决它,但事实并非如此。

提前致谢。

标签: springmongodbspring-bootmongorepository

解决方案


推荐阅读