Java MongoDB 3.0 驱动查询 distinct without filter
Java MongoDB 3.0 driver query distinct without filter
如何使用 Java MongoDB 3.0 驱动程序查询 distinct?
我正在尝试从 MongoDB 中的 locations 集合中查询唯一的 categories 记录。在Mongoshell中,这很简单: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 中创建一个示例数据库,并尽可能在 Java 中使用 3.0 驱动程序提供不同的查询。
在 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());
}
}
}
如何使用 Java MongoDB 3.0 驱动程序查询 distinct?
我正在尝试从 MongoDB 中的 locations 集合中查询唯一的 categories 记录。在Mongoshell中,这很简单: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 中创建一个示例数据库,并尽可能在 Java 中使用 3.0 驱动程序提供不同的查询。
在 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());
}
}
}