Java MongoDB 3.0驱动程序查询不带filter

我如何使用Java MongoDB 3.0驱动程序查询不同的内容?

我试图从MongoDB中的位置集合查询唯一类别记录。 在Mongo shell中,这很简单: db.locations.distinct("categories");

在Java中,它不一样。

 MongoClient client = new MongoClient(); MongoDatabase db = client.getDatabase("yelp"); //this will not compile, although examples from before 3.0 do it this way MongoCursor c = db.getCollection("locations").distinct("categories").iterator(); 

为了避免使用distinct进行强制转换,MongoCollection API允许您为字段提供预期的不同值类型。 因此,如果你知道它们都是字符串,你可以写:

 MongoCursor c = db.getCollection("locations").distinct("categories", String.class).iterator(); 

或所有数字:

 MongoCursor c = db.getCollection("locations").distinct("categories", Number.class).iterator(); 

你仍然可以这样做:

 MongoCursor c = db.getCollection("locations").distinct("categories", Object.class).iterator(); 

如果你不能保证你正在查询的字段值的类型。

我将在MongoDB shell中创建一个示例数据库,并使用3.0驱动程序在Java中提供一个独特的查询。

在shell中,使用演示数据创建数据库:

 use imagedb; db.createCollection("image_files"); db.image_files.insert({ file: "1.jpg", aspect: "4:3" }); db.image_files.insert({ file: "1.jpg", aspect: "16:9" }); db.image_files.insert({ file: "2.jpg", aspect: "4:3" }); db.image_files.insert({ file: "2.jpg", aspect: "16:9" }); db.image_files.insert({ file: "3.jpg", aspect: "2.35:1" }); 

在shell中,我们可能会找到不同的记录。

 > db.image_files.distinct('file'); [ "1.jpg", "2.jpg", "3.jpg" ] 

如何使用Java和MongoDB 3.0驱动程序?

 import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class Main { public static void main(String[] args) { MongoClient mongo = new MongoClient(); MongoDatabase db = mongo.getDatabase("imagedb"); MongoCollection filesCollection = db.getCollection("image_files"); MongoCursor files = filesCollection.distinct("file", String.class).iterator(); while(files.hasNext()) { System.out.println(files.next()); } } }