首页 > 解决方案 > 使用 Block 时编译错误使用 Java MongoDB 4.0.4 驱动程序打印集合

问题描述

使用Java MongoDB Driver 4.0.4、 OpenJDK 11 并遵循MongoDB 文档上的示例时,使用时看到编译错误findIterable.forEach(printBlock);

看起来com.mongodb.Block http://mongodb.github.io/mongo-java-driver/4.0/driver/tutorials/aggregation/也没有被弃用。

public String testLocal() {
  MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
  MongoDatabase database = mongoClient.getDatabase("cord");
  MongoCollection<Document> collection1 = database.getCollection("papers");

  FindIterable<Document> findIterable = collection1.find(new Document());
  findIterable.forEach(printBlock);

}

public Block<Document> printBlock = new Block<Document>() {
  @Override
  public void apply(final Document document) {
    System.out.println(document.toJson());
  }
};

错误:

[ERROR] /Projects/cord/src/main/java/com/engg/java/cord/services/PrimaryService_Local.java:
[24,30] incompatible types: com.mongodb.Block<org.bson.Document> cannot be converted
 to java.util.function.Consumer<? super org.bson.Document>

标签: javamongodbmongodb-java

解决方案


文档显然已经过时了。如果您查看 FindIterable 的 javadocs(http://mongodb.github.io/mongo-java-driver/4.0/apidocs/mongodb-driver-sync/com/mongodb/client/FindIterable.html),您会看到forEach继承自java.lang.Iterable它以 aConsumer作为参数,而不是 a Block

因此,将您的 printBlock 声明替换为:

public Consumer<Document> printBlock = document -> System.out.println(document.toJson());

……一切都会好起来的。


推荐阅读