如何在没有列表的情况下将 Uni<List<Fruit>> 重写为 Multi?响应式编程
How to rewrite Uni<List<Fruit>> to Multi without a list? Reactive Programming
因为我在一个项目中工作,我想将 Uni 重写为 Multi 以使用方法“findall”从集合中获取所有 mongodb 文档。我尝试重写但找不到解决方案
原文:
public Uni<List<Book>> findAll(List<String> authors)
{
return getCollection().
find(Filters.all("authors",authors)).map(Book::from).collectItems().asList();
}
我尝试了什么(但没有用)
public Multi<Book> findAll(List<String> authors)
{
return getCollection().find(Filters.all("authors",authors)).transform().
byFilteringItemsWith(Objects::nonNull).onCompletion().ifEmpty().
failWith(new NoSuchElementException("couldn't find the Authors")).onItem().transform(Book::from);
}
我想您正在使用 Quarkus 提供的 ReactiveMongoClient
。
在这种情况下,您的方法应该是:
ReactiveMongoClient client;
public ReactiveMongoCollection<Book> getCollection() {
return client.getDatabase("db").getCollection("books", Book.class);
}
public Multi<Book> findAll(List<String> authors) {
return getCollection()
.find(Filters.all("authors",authors))
.onItem().transform(Book::from)
.onCompletion().ifEmpty()
.failWith(new NoSuchElementException("..."));
}
您不需要执行 byFilteringItemsWith
,因为 Multi
不能包含 null
项。
因为我在一个项目中工作,我想将 Uni 重写为 Multi 以使用方法“findall”从集合中获取所有 mongodb 文档。我尝试重写但找不到解决方案
原文:
public Uni<List<Book>> findAll(List<String> authors)
{
return getCollection().
find(Filters.all("authors",authors)).map(Book::from).collectItems().asList();
}
我尝试了什么(但没有用)
public Multi<Book> findAll(List<String> authors)
{
return getCollection().find(Filters.all("authors",authors)).transform().
byFilteringItemsWith(Objects::nonNull).onCompletion().ifEmpty().
failWith(new NoSuchElementException("couldn't find the Authors")).onItem().transform(Book::from);
}
我想您正在使用 Quarkus 提供的 ReactiveMongoClient
。
在这种情况下,您的方法应该是:
ReactiveMongoClient client;
public ReactiveMongoCollection<Book> getCollection() {
return client.getDatabase("db").getCollection("books", Book.class);
}
public Multi<Book> findAll(List<String> authors) {
return getCollection()
.find(Filters.all("authors",authors))
.onItem().transform(Book::from)
.onCompletion().ifEmpty()
.failWith(new NoSuchElementException("..."));
}
您不需要执行 byFilteringItemsWith
,因为 Multi
不能包含 null
项。