检索数据
概述
在这份指南中,您可以学习如何从MongoDB数据库中检索数据。要检索数据,请使用读取操作。
读取操作允许您执行以下操作
示例数据
以下部分展示了油漆店老板如何管理他们的客户订单的示例。对于每个订单,老板都会记录颜色和数量,这与他们的
paint_order
集合中的color
和qty
字段相对应。color
和qty
字段在他们的paint_order
集合中{ "_id": 1, "color": "purple", "qty": 10 } { "_id": 2, "color": "green", "qty": 8 } { "_id": 3, "color": "purple", "qty": 4 } { "_id": 4, "color": "green", "qty": 11 }
查找操作
使用find操作从MongoDB中检索现有数据的子集。您可以指定要返回的数据,包括要检索哪些文档、检索顺序以及要检索的数量。
要执行查找操作,请在 MongoCollection
的实例上调用 find()
方法。此方法会在提供的查询过滤器匹配的文档上搜索集合。有关如何指定查询的更多信息,请参阅我们的 指定查询 指南。
示例
所有者希望了解哪些订单包含大于三个但小于九罐油漆,这些油漆来自他们的 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
集合中的文档按颜色分组订单
按颜色汇总数量字段
按数量从高到低排序结果
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服务器手册上的聚合。
有关本页面上提到的方法的更多信息,请参阅以下API文档