[英]Java MongoDB 3.0 driver query distinct without 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<Document> c =
db.getCollection("locations").distinct("categories").iterator();
为了避免使用distinct进行强制转换,MongoCollection API允许您为字段提供预期的不同值类型。 因此,如果你知道它们都是字符串,你可以写:
MongoCursor<String> c =
db.getCollection("locations").distinct("categories", String.class).iterator();
或所有数字:
MongoCursor<Number> c =
db.getCollection("locations").distinct("categories", Number.class).iterator();
你仍然可以这样做:
MongoCursor<Object> 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<Document> filesCollection = db.getCollection("image_files");
MongoCursor<String> files = filesCollection.distinct("file", String.class).iterator();
while(files.hasNext()) {
System.out.println(files.next());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.