繁体   English   中英

Java MongoDB 3.0驱动程序查询不带过滤器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM