如何用Java只查询MongoDB中的特定字段?
How to query only the specific fields in MongoDB with Java?
我正在使用 MongoDB 3.2 和 MongoDB Java 驱动程序 3.2。为了查询文档,我使用以下代码:
Document query = new Document("fetchStatus", new Document("$lte", fetchStatusParam));
ArrayList<Document> unfetchedEvents = dbC_Events.find(query).into(new ArrayList<Document>());
此查询有效,但问题是在这种情况下会检索文档的所有字段(类似于 SQL 中的 select *
)。为了优化查询性能,我想指定我真正需要的字段并只获取它们。
我找到了几个例子,例如:
BasicDBObject query = new BasicDBObject();
BasicDBObject fields = new BasicDBObject("Name", 1);
coll.find(query, fields);
但它们都是为过时版本的 MongoDB Java 驱动程序设计的,例如2.4,而我正在使用 3.2.
我的问题:
如何在 MongoDB Java Driver 3.2 中仅查询文档的特定字段?
有一个 .projection()
方法可以链接到允许您指定字段的查询结果。
或者以文档形式表达,使用熟悉且有据可查的 BSON 语法:
ArrayList<Document> unfecthedEvents = collection.find(
new Document("fetchStatus", new Document("$lte", fetchStatusParam))
).projection(
new Document("Name",1)
).into(new ArrayList<Document>());
或者作为 fields
属性 构建器,它实际上只是转换为完全相同的 BSON:
ArrayList<Document> unfecthedEvents = collection.find(
new Document("fetchStatus", new Document("$lte", fetchStatusParam))
).projection(
fields(include("Name"))
).into(new ArrayList<Document>());
它对我也有用:
BasicDBObject whereQuery = new BasicDBObject();
BasicDBObject fields = new BasicDBObject();
// the conditions in where query
whereQuery.put("dzeeClient", dzeeClient);
whereQuery.put("recommendationRunType", planView);
whereQuery.put("recommendedPlans.enrolled",employeeViewed);
// the fields to be returned from the query-only loginId, and remove _id
fields.put("loginId", 1);
fields.put("_id", 0);
FindIterable<Document> cursor = collection.find(whereQuery)
.projection(fields).sort(new BasicDBObject("timeStamp",-1)).limit(1);
我正在使用 MongoDB 3.2 和 MongoDB Java 驱动程序 3.2。为了查询文档,我使用以下代码:
Document query = new Document("fetchStatus", new Document("$lte", fetchStatusParam));
ArrayList<Document> unfetchedEvents = dbC_Events.find(query).into(new ArrayList<Document>());
此查询有效,但问题是在这种情况下会检索文档的所有字段(类似于 SQL 中的 select *
)。为了优化查询性能,我想指定我真正需要的字段并只获取它们。
我找到了几个例子,例如:
BasicDBObject query = new BasicDBObject();
BasicDBObject fields = new BasicDBObject("Name", 1);
coll.find(query, fields);
但它们都是为过时版本的 MongoDB Java 驱动程序设计的,例如2.4,而我正在使用 3.2.
我的问题:
如何在 MongoDB Java Driver 3.2 中仅查询文档的特定字段?
有一个 .projection()
方法可以链接到允许您指定字段的查询结果。
或者以文档形式表达,使用熟悉且有据可查的 BSON 语法:
ArrayList<Document> unfecthedEvents = collection.find(
new Document("fetchStatus", new Document("$lte", fetchStatusParam))
).projection(
new Document("Name",1)
).into(new ArrayList<Document>());
或者作为 fields
属性 构建器,它实际上只是转换为完全相同的 BSON:
ArrayList<Document> unfecthedEvents = collection.find(
new Document("fetchStatus", new Document("$lte", fetchStatusParam))
).projection(
fields(include("Name"))
).into(new ArrayList<Document>());
它对我也有用:
BasicDBObject whereQuery = new BasicDBObject();
BasicDBObject fields = new BasicDBObject();
// the conditions in where query
whereQuery.put("dzeeClient", dzeeClient);
whereQuery.put("recommendationRunType", planView);
whereQuery.put("recommendedPlans.enrolled",employeeViewed);
// the fields to be returned from the query-only loginId, and remove _id
fields.put("loginId", 1);
fields.put("_id", 0);
FindIterable<Document> cursor = collection.find(whereQuery)
.projection(fields).sort(new BasicDBObject("timeStamp",-1)).limit(1);