在我的Sping Boot 应用程序中有以下类:
@Document(collection = "setting")
public class Setting {
private @MongoId(FieldType.OBJECT_ID)
ObjectId id;
private String name;
private String type;
private Integer priority;
}
我有一个REST POST端点,在那里我得到一个带有名称和类型但没有优先级的Setting对象,然后我必须把它放入我的MongoDB中,但我必须把它放入MongoDB中并具有正确的优先级。
1是最高优先级,每种类型的优先级都是唯一的,所以不能在同一类型中有两个相同优先级的设置。新设置的优先级最低,这意味着如果我有3个1-3优先级的设置,那么新设置的优先级将为4,如果没有设置,那么新设置的优先级将为1。
我现在是这么解决的:
Aggregation priorityAggregation = Aggregation.newAggregation(
Aggregation.match(where("type").is(setting.getType)))
Aggregation.group().max("priority").as("priority"),
Aggregation.project("priority").andExclude("_id")
);
Map<String, Integer> maxPriority = mongo.aggregate(priorityAggregation, "setting", HashMap.class).getUniqueMappedResult();
if (maxPriority != null && maxPriority.containsKey("priority") && maxPriority.get("priority") != null) {
baseConfig.setPriority(maxPriority.get("priority") + 1);
} else {
baseConfig.setPriority(1);
}
MongoTemplate.save(setting);
这样做可以,但看起来不太好。有没有更好的方法?
1条答案
按热度按时间zed5wv101#
可以使用查询而不是聚集来获取类型的最大优先级设置。请尝试以下操作: