【发布时间】:2022-11-02 01:52:17
【问题描述】:
我对 mongo findOneAndUpdate 有一种奇怪的(?)方法: 如果过滤器匹配 - 然后更新,如果不匹配 - 好吧:
public Mono<Module> findOneAndUpdateNotificationDate(String moduleId, Duration frequency) {
Bson filter = and(
eq(ID, new ObjectId(moduleId)),
or(
exists(LAST_NOTIFICATION_DATE, false),
lt(LAST_NOTIFICATION_DATE, now.minus(frequency))
)
);
Bson updates = combine(
set(LAST_NOTIFICATION_DATE, now)
);
return Mono.from(collection.findOneAndUpdate(filter, updates));
}
和使用它的服务:
private Mono<Boolean> maybeSendNotification(String moduleId, ModuleState state) {
return repo.findOneAndUpdateNotificationDate(moduleId, notificationFrequency)
.switchIfEmpty(Mono.error(new NotFoundException()))
.flatMap(module -> notificationService.sendAlertEmail(module, moduleState))
.onErrorResume(NotFoundException.class, e -> Mono.just(true));
}
目标是以一些 [频率] 发送电子邮件通知。
想知道在这里使用异常的正确方法吗?以及如何正确地做到这一点而不破坏打字?
【问题讨论】: