我有一个名为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发送邮件两次或三次,也应计算在内
现在,
我想找到哪些用户相互发送了大多数电子邮件
答案 0 :(得分:3)
您需要使用聚合框架,如下所示:
尝试类似的东西:
use test;
db.mails.aggregate([
{$unwind: "$emailData.emailTo"},
{$group: {
_id: {
"From": "$emailData.emailFrom",
"To": "$emailData.emailTo"
},
_totalMailsSent: {$sum:1}
}},
{$sort: {_totalMailsSent:-1}},
{$limit: 5}
])
如果你仍然没有得到它,请告诉我。祝你好运;)。