使用reactive-streams检查MongoDB中的文档是否存在

ijxebb2r  于 2023-01-25  发布在  Go
关注(0)|答案(1)|浏览(155)

我尝试检查文档是否已存在,但遇到一些问题。我尝试了不同的解决方案:
1.使用findOne()并检查输出是否为null(不工作)
1.使用countDocument()(不起作用)最常见的错误是我不能强制转换,例如:PublisherlongPublisherDocument
谢谢。
方法一:

Document d = collection.find(eq("UUID", id)).first();
if (d == null) {
    System.out.println("document = null");
    return;
}
System.out.println("document exists");

方法二:

if (collection.countDocuments(query) < 1) {
    System.out.println("Document exists");
}
ee7vknir

ee7vknir1#

要检查文档是否存在,可以使用ReactiveMongoTemplate类中的exists()方法。该方法以Query对象作为参数,用于指定匹配文档的条件。您可以在此处阅读有关exists()方法的信息。
以下示例说明如何使用exists()方法检查具有特定id字段的文档是否存在于名为docs的集合中:

Query query = new Query(Criteria.where("id").is("unique-id-123"));
Mono<Boolean> exists = reactiveMongoTemplate.exists(query, “docs”);

其中,query等于org.springframework.data.mongodb.core.query.QueryreactiveMongoTemplate等于org.springframework.data.mongodb.core.ReactiveMongoTemplate
您提到的其他解决方案实际上也必须有效,例如:
1.使用findOne()方法:

Query query = new Query(Criteria.where("id").is("unique-id-123"));
Mono<Document> documentMono = reactiveMongoTemplate.findOne(query, Document.class, "docs");
documentMono.subscribe(doc -> {
    if (doc != null) {
        System.out.println("Document exists!");
    } else {
        System.out.println("Document does not exist!");
    }
});

您可以在这里阅读有关findOne()方法的信息。
1.使用count()方法:

Query query = new Query(Criteria.where("id").is("unique-id-123"));
Mono<Long> count = reactiveMongoTemplate.count(query, "docs");
count.subscribe(cnt -> {
    if (cnt > 0) {
        System.out.println("Document exists!");
    } else {
        System.out.println("Document does not exist!");
    }
});

您可以在此处阅读有关count()方法的信息

相关问题