mongodb数据的聚合
  nQkVcpdWfLDr 2023年11月02日 41 0

1.数据模型

假定某个运动俱乐部使用了名为 users 的集合,存储了用户入会时间,喜欢的运动等数据,在文档中的格式如下:

mongodb数据的聚合_字段

2.将文档标准化后再排序

下面的操作返回按字母顺序排序的大写格式的用户名称记录。该聚合包含了 users 集合中所有文档的用户名。你可能需要预先把用户名标准化,以方便后面步骤的处理。

db.users.aggregate(
  [
    { $project : { name:{$toUpper:"$_id"} , _id:0 } },
    { $sort : { name : 1 } }
  ]
)

users 集合中的所有文档都输入到管道,该管道包含了以下的操作:

执行$project 操作:
    创建新的字段 name。
    首先使用 $toUpper 操作符将 _id 的值转换为大写格式,并把新值保存在由 $project 创建的新的字段 name 中。
    删除 id 字段。除非明确删除 _id 字段,否则 $project 会默认保留该字段。
使用 $sort 操作符对结果集按 name 字段进行排序。

本次聚合的结果如下:

mongodb数据的聚合_字段_02

3.查询按入会日期排序的用户名列表

接下来的聚合操作将会返回按入会日期排序的用户名列表。这样的聚合可以帮助生成会员的续费通知。

db.users.aggregate(
  [
    { $project :
       {
         month_joined : { $month : "$joined" },
         name : "$_id",
         _id : 0
       }
    },
    { $sort : { month_joined : 1 } }
  ]
)

管道会查询 users 集合中的所有文档,并进行下面这些操作的处理。

执行 $project 操作:
    创建两个新的字段: month_joined 和 name 。
    从结果集中删除 id 字段。除非明确删除 id 字段,否则 aggregate() 方法默认保留该字段。
$month 操作符从 joined 字段读取到用户的入会月份,并使用 $project 把入会月份赋值到month_joined 字段。
使用 $sort 操作符对结果集按 month_joined 字段进行排序。

该操作返回的结果集是这样的:

mongodb数据的聚合_操作符_03

4.计算每个月的入会人数

下面的操作计算每个月份的入会人数。你可以使用这些数据来制定营销策略和展开会员续费活动。

db.users.aggregate(
  [
    { $project : { month_joined : { $month : "$joined" } } } ,
    { $group : { _id : {month_joined:"$month_joined"} , number : { $sum : 1 } } },
    { $sort : { "_id.month_joined" : 1 } }
  ]
)

管道会查询 users 集合中的所有文档,并进行下面这些操作的处理。

使用 $project 创建一个新的字段 month_joined 。
$month 操作符从 joined 字段读取到用户的入会月份,并使用 $project 把入会月份赋值到month_joined 字段。
$group 遍历所有文档,并计算每个月份的入会人数。 $group 会为每个月份创建一个新的包含两个字段的新文档:
    _id,包含了一个内嵌文档,文档里面记录了 month_joined 字段和它的值。
    新加的 number 字段。 $sum 会统计所有当前月份入会的人数,并保存在 number 中。
$sort 会为新创建的文档按 month_joined 字段进行排序。

本次聚合操作的结果是:

mongodb数据的聚合_用户名_04

5.查找最受会员喜欢的5种运动

下面的操作计算最受会员喜欢的5种运动。这样的分析可以帮助制定未来的发展计划。

db.users.aggregate(
  [
    { $unwind : "$likes" },
    { $group : { _id : "$likes" , number : { $sum : 1 } } },
    { $sort : { number : -1 } },
    { $limit : 5 }
  ]
)

本次管道首先读取 users 中的所有文档,并对这些文档进行下面的操作:

$unwind 首先对 likes 数组中的值进行分类,并为数组的每个值创建一个新的文档。
例子
users 集合中有一些这样的文档
{
  _id : "jane",
  joined : ISODate("2011-03-02"),
  likes : ["golf", "racquetball"]
}
$unwind 会创建出下面的文档:

{
  _id : "jane",
  joined : ISODate("2011-03-02"),
  likes : "golf"
}
{
  _id : "jane",
  joined : ISODate("2011-03-02"),
  likes : "racquetball"
}

$group 计算每种 likes 的总数。在这个步骤中, $group 会一个创建新的文档:
   _id,记录了 likes 值。
   number,保存了由 $sum 统计的每种 likes 的总人数值。
$sort 对这些文档按 number 字段进行降序排序。
$limit 限定最前面的5个结果。

mongodb数据的聚合_操作符_05

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  lG7RE7vNF4mc   2023年11月13日   27   0   0 3d权重字段
  wpWn7yzs0oKF   2023年11月13日   35   0   0 数据库字段SQL
  nQkVcpdWfLDr   2023年11月13日   32   0   0 数据2d字段
nQkVcpdWfLDr