计算两个客户之间的第二高的对话

时间:2013-06-28 13:26:11

标签: mongodb

我有一个名为email的集合,其中包含三个字段:id,emailFrom,emailTo

现在emailTo字段是一个数组

--------------------------------------------------
| id | emailFrom        | EmailTo                |
--------------------------------------------------
| 1  | A                | [B,C,D,B]              |
--------------------------------------------------
| 2  | B                | [A,C,D]                |
--------------------------------------------------
| 3  | A                | [B,C]                  |
--------------------------------------------------
| 4  | C                | [A]                    |
--------------------------------------------------
| 5  | B                | [C,C,A,D,E,F]          |
--------------------------------------------------
| 6  | A                | [C,B]                  |
--------------------------------------------------
| 7  | A                | [B,F,E,I]              |
--------------------------------------------------

现在我的问题是,如何找出两个客户之间的第二个最高对话

即。发送邮件给B和B发送邮件给A,这意味着他们有第2次会话。 如果A向B发送邮件两次或三次,也应计算在内 现在,
我想找到哪些用户相互发送了大多数电子邮件

1 个答案:

答案 0 :(得分:3)

您需要使用聚合框架,如下所示:

  1. 通过电子邮件放松到
  2. group by emailFrom&电子邮件以获得独特的转换
  3. 在组中通过汇总唯一转换
  4. 按上一步的总和降序排序
  5. 跳过第一个结果(可选)
  6. 限制为一个(可选)
  7. 尝试类似的东西:

    use test;
    
    db.mails.aggregate([
        {$unwind: "$emailData.emailTo"},
        {$group: {
            _id: {
                "From": "$emailData.emailFrom",
                "To": "$emailData.emailTo"
            },
            _totalMailsSent: {$sum:1}
        }},
        {$sort: {_totalMailsSent:-1}},
        {$limit: 5}
    ])
    

    如果你仍然没有得到它,请告诉我。祝你好运;)。