我有一个电子邮件应用程序,它使用如下所示的DB模式:
db={
"archives": [
{
"header": {
"subject": "message-1",
"message-id": "a"
}
},
{
"header": {
"subject": "Re:message-1",
"message-id": "b",
"reply-to": [
"a"
]
}
},
{
"header": {
"subject": "Re:message-1",
"message-id": "c",
"reply-to": [
"a"
]
}
},
{
"header": {
"subject": "message-2",
"message-id": "d"
}
},
{
"header": {
"subject": "Re:message-2",
"message-id": "e",
"reply-to": [
"d"
],
}
}
]
}我可以列出所有开始的电子邮件(那些没有reply-to标签)如下:
db.archives.aggregate([
{
$match: {
"header.reply-to": {
$exists: false
}
}
}
])这表明只有message-id: a和message-id: d才是开始发送的电子邮件:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"header": {
"message-id": "a",
"subject": "message-1"
}
},
{
"_id": ObjectId("5a934e000102030405000003"),
"header": {
"message-id": "d",
"subject": "message-2"
}
}
]我无法弄清楚的是,如何获得回复的数量,每个开始的电子邮件。在本例中:
我在MongoDB操场上发布了这个示例:https://mongoplayground.net/p/H6IT0SfCqBp
发布于 2020-12-21 15:55:50
$lookup,将header.message-id传递为localField,将header.reply-to传递为foreignField$size获取repliesCount数组中的总元素db.archives.aggregate([
{ $match: { "header.reply-to": { $exists: false } } },
{
$lookup: {
from: "archives",
localField: "header.message-id",
foreignField: "header.reply-to",
as: "repliesCount"
}
},
{ $addFields: { repliesCount: { $size: "$repliesCount" } } }
])https://stackoverflow.com/questions/65393341
复制相似问题