Docs 菜单
Docs 主页
/ / /
Java (Sync) 驱动程序
/ / /

Retrieve Data

在此页面上

  • Overview
  • 查找操作
  • 聚合操作

在本指南中,您可以学习如何从 MongoDB 数据库中检索数据。如需检索数据,请使用读取操作。

通过读取操作,您可以执行以下操作:

  • 使用查找操作从集合中检索文档子集

  • 使用聚合操作对从集合中检索到的文档执行转换

  • 使用变更流监控数据库的实时更改

以下几节将举例说明涂料店老板如何管理客户订单。对于每个订单,涂料店老板都会记录颜色和数量,与 paint_order 集合中的 colorqty 字段相对应:

{ "_id": 1, "color": "purple", "qty": 10 }
{ "_id": 2, "color": "green", "qty": 8 }
{ "_id": 3, "color": "purple", "qty": 4 }
{ "_id": 4, "color": "green", "qty": 11 }

使用查找操作检索 MongoDB 中现有数据的子集。您可以指定要返回哪些数据,包括要检索哪些文档、以什么顺序检索它们以及要检索多少个文档。

要执行查找操作,请对MongoCollection的实例调用find()方法。 此方法在collection中搜索与您提供的查询筛选器相匹配的文档。有关如何指定查询的更多信息,请参阅我们的“指定查询”指南。

店主想知道哪些订单包含的Paint_order 集合中的油漆多于三罐但少于九罐。

针对这种情况,涂料店老板会寻找符合标准的订单:

Bson filter = Filters.and(Filters.gt("qty", 3), Filters.lt("qty", 9));
// Retrieves documents that match the filter and prints them as JSON
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

有关如何构建筛选器的更多信息,请参阅我们的筛选器构建器指南。

以下显示了上述查询的输出:

{ "_id": 2, "color": "green", "qty": 8 }
{ "_id": 3, "color": "purple", "qty": 4 }

当所有者运行此查询后,会找到两个符合该条件的订单。

有关可运行 find() 的示例,请参阅我们的查找多个文档页面。

使用聚合操作来执行聚合管道中的各个阶段。聚合管道是产生聚合结果的多阶段转换。

要执行聚合操作,请在 MongoCollection 的实例上调用 aggregate() 方法。此方法接受依序运行的聚合表达式。要执行聚合,您可以定义聚合阶段来指定如何匹配文档、重命名字段和对值进行分组。有关详情,请参阅聚合指南。

店主想知道其paint_order 集合中哪种油漆颜色的购买量最大(销量最高)。

针对这种情况,涂料店老板创建了聚合管道,其中:

  • 匹配 paint_order 集合中的所有文档

  • 按颜色分组订单

  • 按颜色汇总数量字段

  • 将结果按数量从高到低排序

Bson filter = Filters.empty();
// Prints the collection's "color" values and each value's frequency in descending frequency order
collection.aggregate(Arrays.asList(
Aggregates.match(filter),
Aggregates.group("$color", Accumulators.sum("qty", "$qty")),
Aggregates.sort(Sorts.descending("qty"))))
.forEach(doc -> System.out.println(doc.toJson()));

以下显示了上述聚合的输出:

{ "_id": "green", "qty": 19 }
{ "_id": "purple", "qty": 14 }

涂料店老板运行聚合后,发现“绿色”是购买量最大的颜色。

有关如何构建聚合管道的更多信息,请参阅 MongoDB Server 手册页面中的聚合部分。

有关此页面上提及的方法的更多信息,请参阅以下 API 文档:

后退

读取操作