我正在尝试在java中使用mongodb
的独特查询。看着这个链接它说我可以传递字段名称:
https://api.mongodb.org/java/3.0/com/mongodb/DBCollection.html#distinct-java.lang.String-
所以我有:
searchResults = playerCollection.distinct("team");
但是它说它无法解决方法distinct(java.lang.String
)
似乎我认为我必须放入另一个类参数。但我不想要任何结果的子集。我只想要所有不同的团队。
更新:我如何实例化集合:
uri = new MongoClientURI("mongodb://<MongoURI>");
mongoClient = new MongoClient(uri);
mongoDB = mongoClient.getDatabase(uri.getDatabase());
playerCollection = mongoDB.getCollection("players");
答案 0 :(得分:1)
请检查您有哪个驱动程序版本?我相信Distinct(<string>
)在3.0之前。现在它已经好了。
请检查
同时检查mongoDb.getCollection
的类型,它应该是MongoCollection<Document>
而不是'DbCollection'
示例:
DistinctIterable<Double> documents = playerCollection.distinct("aID", Double.class );
for (Double document : documents) {
System.out.println(document);
}
aID
是您的独特字段。 distinct
的第二个参数表示MongoDB文档中aID
属性的类型。
希望它会对你有帮助。
答案 1 :(得分:1)
您尝试使用的方法是为DBCollection
类定义的,但您要为MongoCollection<Document>
类对象调用它。因此错误,因为两个类都具有相同名称但签名不同的方法。使用所需方法的方法是更改实例化数据库和集合对象的方式。
uri = new MongoClientURI("mongodb://<MongoURI>");
mongoClient = new MongoClient(uri);
//http://api.mongodb.org/java/3.0/com/mongodb/DB.html
// create a object of the DB class
mongoDB = mongoClient.getDB(uri.getDatabase());
//http://api.mongodb.org/java/3.0/com/mongodb/DB.html#getCollection-java.lang.String-
playerCollection = mongoDB.getCollection("players");
// now that you have a DBCollection object you can use the distinct(String) method
searchResults = playerCollection.distinct("team");
此外,v3.0(http://api.mongodb.org/java/3.0/deprecated-list.html#class)的弃用列表不包括DB
或DBCollection
类,因此您应该没问题。