Java和MongoDB:forEach(Block<?super Document>)是模棱两可的



我正在尝试使用MongoDB文档中的过滤器来扩展Azure Java/MongoDB简单示例,同时了解功能Java。下面的代码抛出错误

MongoDatabase database = mongoClient.getDatabase("my-db");
Document queryResult = collection.find(Filters.eq("fruit", "apple")).first();
Bson filter = Filters.and(Filters.eq("param", 2293), Filters.eq("param1", 202));
final Document queryResult2 = collection.find(filter).forEach(doc -> 
System.out.println(doc.toJson()));

正在给我以下错误

The method forEach(Block<? super Document>) is ambiguous for the type FindIterable<Document>",

我已经看过这个答案,并尝试了包括以下在内的各种方法,但我显然缺乏forEach的经验!

//cannot convert from void to document error
Document queryResult2 = collection.find(filter).forEach((Block<? super Document>) doc -> System.out.println(doc.toJson()));
//cannot convert from void to document error
final Document queryResult2 = collection.find(filter).forEach((Consumer<? super Document>) (Document document) -> {
System.out.println(document.toJson());
});

感谢提供的所有帮助/提示

这里有两个错误:

Document queryResult2 = collection.find(filter).forEach((Block<? super Document>) doc -> System.out.println(doc.toJson()));

forEach的返回类型为void,它不返回任何内容。所以作业是错误的。这就是为什么你得到cannot convert from void to document error

其次,Document表示单个文档,而不是文档的集合。因此,简单地分配给Document对象也是错误的。

试试这样的东西:

List<Document> documents = collection.find(filter).map(doc -> doc).into(new ArrayList<Document>());

这是指向forachmapMongodb文档的链接。

最新更新