ReactiveMongoTemplate findOne для несуществующего элемента не вызывается - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь получить один документ из коллекции. Документ может не существовать, и в случае null я хочу вернуть значение по умолчанию.

Мой запрос и преобразование:

    return template.findOne(Query().addCriteria(Criteria.where("id")), DeviceSettings::class.java)
            .map {
                when (it) {
                    null -> {
                        defaultSettings(clock)
                    }
                    else -> {
                        listOf(
                                Instant.now(clock).toString(),
                                it.nextMeasurement.toString(),
                                it.shouldUpdateFirmware.toString()
                        )
                    }
                }

            }
}

К сожалению, приведенное выше преобразование карты не вызывается.

Когда я упрощаю вызов до простого вызываемого, он вызывается:

    return Mono.fromCallable({
        defaultSettings(clock)
    })

1 Ответ

0 голосов
/ 29 апреля 2018

Reactor не использует пустые значения в потоках, а fineOne должен возвращать пустое моно, если результата нет. В вашем случае вы должны использовать switchIfEmpty оператор

template.findOne(...) .map { listOf(...) } .switchIfEmpty(Mono.just(defaultSettings(clock))

...