我有一个连接到MongoDB的Sping Boot 应用程序,在MongoDB中有一个名为configurations
的集合,包含以下文档:
_id: ObjectId('6231984016d57c64884c8e52')
name: Gio
priority: 1
_id: ObjectId('61f2a0351a7b18283fc5ce9b')
name: Blamee
priority: 2
_id: ObjectId('61f39f8ae2daa732deff6d90')
name: Lonic
priority: 3
_id: ObjectId('61e56339b528bf009feca149')
name: TechRaz
priority: 4
_id: ObjectId('62013a86b6b62621b529bed4')
name: Gild
priority: 5
所有文档都有一个唯一的优先级。从用户界面中,您可以从一个列表中更改优先级,您可以将配置拖放到您希望的优先级。但是,我遇到的问题是,当删除配置时(一次只能删除一个配置),在优先级索引中创建了一个洞。2我想知道如何编写一些代码,在删除配置时关闭优先级差距,因此,如果删除“Lonic”,我希望优先级更改如下:
_id: ObjectId('6231984016d57c64884c8e52')
name: Gio
priority: 1
_id: ObjectId('61f2a0351a7b18283fc5ce9b')
name: Blamee
priority: 2
_id: ObjectId('61e56339b528bf009feca149')
name: TechRaz
priority: 3
_id: ObjectId('62013a86b6b62621b529bed4')
name: Gild
priority: 4
这是我尝试过的方法:
删除配置后,我说:
Query query = new Query();
query.with(Sort.by(Sort.Direction.asc, "priority"));
List<Configuration> remainingConfigsAfterDelete = mongoTemplate.find(query, Configuration.class);
for (int i = 1; i+1 < remainingConfigsAfterDelete.size(); i++) {
remainingConfigsAfterDelete.get(i).setPriority(i);
}
然后用bulkOperations或其他方法更新所有优先级。第一优先级必须从1开始,而不是从0开始。我只是觉得我在这里做得太过了。应该有更简单的方法来做这件事。
1条答案
按热度按时间bweufnob1#
删除某个优先级时,大于该优先级的每个优先级都应递减。