MongoDB聚合框架是直接在数据库中执行复杂数据转换的强大工具。它使用基于管道的方法,其中数据通过一系列阶段,每个阶段都执行特定操作。这些阶段可以包括过滤,分组,分类,投影等等。让我们用一个例子说明。想象一下,您有一个名为 sales
的集合,其中包含这样的文档:
<code class="“" json> {&quort; _id; :objectId(5F9F16C75474444444444444),“项目” :“ ABC”价格“价格” :10,“数量” :2,“日期” :iSodate(2024-01-15T00:00:00z; quot; :objectId(“ 5F9F16C75474444444444445”) :'xyz&quot“价格” :20,“数量” :1,“日期” :iSodate(2024-01-15T00:00:00z; quot; :objectId(5f9f16c75474444444444446),“ :“ ABC”价格“价格” :10,“数量” :3,“日期” :iSodate(2024-01-16T00:00:00:00z;)} </code>
要计算每个项目的总收入,您将使用以下聚合管道:
<pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <code class="“" totalrevenue sum price quald quot quantity quats sort> </code>
该管道首先使用组成然后,对于每个组,它使用
$ sum 和 $乘
计算总计
,以乘以价格和数量。最后,使用 $ sort
以 totalRevenue
的降序顺序排列结果。这证明了如何将多个阶段链接在一起以进行复杂的转换。其他常见阶段包括 $ MATD
(过滤), $ project
(选择和重命名字段), $ untind
$ lookup (与其他集合一起加入 - 稍后讨论了一些常见的用途)。查询?
除了简单的查询之外,例如查找符合特定标准的文档,在需要数据操作和分析的情况下,聚合框架擅长。以下是一些常见的用例:
$匹配
中使用的字段上创建适当的索引, $ sort $查找阶段。索引大大加快了数据检索。 $ match
阶段阶段在管道早期,以尽快滤除不需要的文档。这减少了通过后续阶段处理的数据量。$sum
is generally faster than $reduce
for summing values.$project
stages to reduce the data volume processed.$lookup
joins: When joining collections, ensure the加入集合在联接字段上具有适当的索引。考虑使用 $查找
与让
和管道
用于复杂的加入条件。 db.collection.aggregate(...)。divell()
分析执行计划并确定潜在的瓶颈的方法。 $查找
阶段。 $ lookup
执行左外连接,从另一个集合中引入数据。 :1,“名称” :“约翰·杜伊” } {'_id; :2,“名称” :“简·史密斯” } //订单集合{'_id; :101,“ customer_id” :1,“金额” :100} {'_id; :102,“ customer_id” :1,“金额” :200} {'_id; :103,“ customer_id” :2,“金额” :50}
要检索客户信息及其订单,您将使用以下聚合管道:
<code class="“" javascript> db.customers.aggregate([{$ lookup:{$ lookup:{$ lookup:{$ lookep:{来自: &quot; quot; quot}}})</code>
此管道加入和
orders
基于 _id> _id
field code> consuster code> code> cosite> cosite_id in Code 。结果将在订单
字段中包括客户的信息和相关订单数组。请记住,在>客户
和 customer_id
字段 in order> orders
中 in conders in 以获得最佳性能以获得最佳性能。可以使用 LET
和 Pipeline
选项在 $查找
stage。
以上是如何将MongoDB中的聚合框架用于复杂的数据转换?的详细内容。更多信息请关注PHP中文网其他相关文章!