在java

时间:2016-03-05 16:55:56

标签: java mongodb

我正在尝试在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");

2 个答案:

答案 0 :(得分:1)

请检查您有哪个驱动程序版本?我相信Distinct(<string>)在3.0之前。现在它已经好了。

请检查

http://api.mongodb.org/java/3.0/com/mongodb/async/client/MongoCollection.html#distinct-java.lang.String-java.lang.Class-

同时检查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)的弃用列表不包括DBDBCollection类,因此您应该没问题。