考虑一个假设的体育俱乐部,它的数据库包含一个users
跟踪用户加入日期,运动偏好的
集合,并将这些数据存储在类似于以下内容的文档中:
以下操作以大写字母顺序返回用户名。聚合包括users
集合中所有文档的用户名。您可以执行此操作以标准化用户名以进行处理。
users
集合中的所有文档都通过管道,该管道包括以下操作:
聚合的结果类似于以下内容:
以下聚合操作返回按其加入月份排序的用户名。这种聚合可以帮助生成成员资格更新通知。
管道通过users
以下操作传递集合中的所有文档:
$project
操作:month_joined
和name
。id
从结果中抑制。除非明确禁止,否则该aggregate()
方法包括_id
。$month
运营商的值转换
joined
领域月份的整数表示。然后,
$project
操作员将这些值分配给该
month_joined
字段。$sort
操作通过排序的结果
month_joined
字段。该操作返回类似于以下内容的结果:
以下操作显示一年中每个月有多少人加入。您可以将这些汇总数据用于招聘和营销策略。
管道通过users
以下操作传递集合中的所有文档:
$project
操作创建一个名为新的领域
month_joined
。$month
运营商的值转换
joined
领域月份的整数表示。然后,
$project
操作员将值分配给该
month_joined
字段。$group
运营商收集与给定的所有文件month_joined
的价值和次数多少文件有该值。具体来说,对于每个唯一值,
$group
使用两个字段创建一个新的“每月”文档:_id
,其中包含带有该month_joined
字段及其值的嵌套文档
。number
,这是一个生成的字段。$sum
对于每个包含给定month_joined
值的文档,操作员将该字段增加1 。$sort
运营商排序由创建的文档
$group
根据内容
month_joined
领域。此聚合操作的结果类似于以下内容:
以下汇总收集了数据集中前五个最“喜欢”的活动。这种类型的分析可以帮助规划和未来开发。
管道以users
集合中的所有文档开始,并通过以下操作传递这些文档:
的$unwind
操作者中的每个值分隔
likes
阵列,以及用于所述阵列中的每个元素创建源文档的新版本。
该$group
运营商收集与为同一值的所有文档likes
领域,并计算各分组。利用此信息,$group
创建具有两个字段的新文档:
_id
,其中包含likes
值。number
,这是一个生成的字段。$sum
对于每个包含给定likes
值的文档,操作员将该字段增加1 。该$sort
运营商排序这些文件由
number
以相反的顺序领域。
该$limit
操作仅包括前5个结果文档。
聚合的结果类似于以下内容: