Overview
本部分包括有关如何使用每个可用构建者的指南,并演示了Java Reactive Streams驾驶员构建器类提供的实用程序。
Java Reactive Streams驾驶员包括用于增删改查操作和 Aggregation API 的构建器类。静态实用程序方法可让您更高效地构建查询和其他文档。
为什么要使用构建器?
使用构建器类时,您可以利用以下功能:
Java编译器在开发期间查找错误
用于发现和代码完成的 IDE
构建器类启用Java编译器和 IDE 能够尽早捕获错误,例如拼写错误的操作符或缺失的参数。如果改用MongoDB Shell或纯Java ,则将写入符写入字符串而无法看到问题的可视化指示,从而将这些错误推到运行时而不是编译时。
通过使用构建器类,您可以将操作符写入为方法,以便 IDE 立即指示代码是否有错误。 开发时,IDE 还可以向您显示可以使用的方法,并且可以使用占位符参数来完成代码。
示例场景
假设您要向 users集合中满足以下条件的所有用户发送市场营销电子邮件:
gender字段值为"female"的用户age字段的值大于29的用户
您还需要让查询仅返回他们的电子邮件地址。
users集合中的文档由以下类建模:
record User( @BsonId ObjectId id, String gender, int age, String email )
使用 MongoDB Shell
以下代码提供了在MongoDB Shell中用于执行查询的命令:
collection.find({ "gender": "female", "age" : { "$gt": 29 }}, { "_id": 0, "email": 1 })
不使用构建器
以下代码提供了在Java Reactive Streams驾驶员中创建的无构建者的查找操作:
Bson filter = new Document().append("gender", "female").append("age", new Document().append("$gt", 29)); Bson projection = new Document().append("_id", 0).append("email", 1); Flux.from(collection.find(filter).projection(projection)) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
在这种情况下,您在过滤中写入 "\$gt"操作符时可能很容易出现错误,但 IDE 仅在运行时返回相关错误。
使用构建器
以下代码提供了使用Java Reactive Streams驾驶员中的构建者创建的查找操作:
import static com.mongodb.client.model.Filters.*; import static com.mongodb.client.model.Projections.*;
Bson filter = and(eq("gender", "female"), gt("age", 29)); Bson projection = fields(excludeId(), include("email")); Flux.from(collection.find(filter).projection(projection)) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();