0

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

现在 emailTo 字段是一个数组

--------------------------------------------------
| 编号 | 电子邮件发件人 | 电邮至 |
--------------------------------------------------
| 1 | 一个 | [B,C,D,B] |
--------------------------------------------------
| 2 | 乙| [A,C,D] |
--------------------------------------------------
| 3 | 一个 | [B,C] |
--------------------------------------------------
| 4 | C | [一] |
--------------------------------------------------
| 5 | 乙| [C,C,A,D,E,F] |
--------------------------------------------------
| 6 | 一个 | [C,B] |
--------------------------------------------------
| 7 | 一个 | [B,F,E,I] |
--------------------------------------------------

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

即A给B发邮件,B给A发邮件,表示他们的对话计数为2。如果A给B发邮件两次或三次,现在也应该算,
我想找出哪些用户有互相发送大多数电子邮件

4

1 回答 1

3

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

  1. 通过电子邮件放松
  2. 按 emailFrom 和 emailTo 分组以获得独特的转换
  3. 在 group by sum 独特的转换
  4. 对上一步的总和进行降序排序
  5. 跳过第一个结果(可选)
  6. 限制为一个(可选)

尝试这样的事情:

use test;

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

如果您仍然不明白,请告诉我。祝你好运 ;)。

于 2013-06-28T13:49:49.940 回答