spring - 无法更新 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 排序应该可以解决它,但事实并非如此。
提前致谢。
解决方案
推荐阅读
- java - 如何制作一种计算方法,该方法从 4 种以上的方法中获取变量来进行计算?
- python - 为什么我得到正确的回文输出但没有输出常规数字?
- rest - 如何设置全局soap ui基本身份验证和Accept as application/json
- ipython - 为什么在 ipython 上的 if 块之后续行会立即中断?
- windows - 打包为 UWP 应用时,带有两个字母名称 ('bg') 的文件夹内的图像消失
- ember.js - ember 引擎 routes.js 中的嵌套路由?
- jquery - Handsontable 中的虚拟键盘
- assembly - EAFFFFFE 在 ARM 架构中是什么意思
- php - 执行 mysqli_query 有效,但它不返回 WHERE CLAUSE 中给出的确切行
- javascript - 全球 Firebase 参考