gpt4 book ai didi

javascript - MongoDB mapReduce 每分钟文档计数由附加类别字段分隔

转载 作者:可可西里 更新时间:2023-11-01 16:37:26 26 4
gpt4 key购买 nike

我有一个具有以下架构的 MongoDB 集合:

const MessageSchema = {
message: {type: String},
category: {type String, allowedValues: ['a', 'b', 'c', 'd', 'e']},
createdAt: {type: Date}
}

这些消息文档是在随机时间间隔创建的。我想创建一个图表所需的数据集,该图表绘制每个类别的每分钟消息数(计数)。输出将是一个包含键 time、a.count、b.count、c.count、d.counte.count 的对象数组。生成的数据集应仅考虑上周的数据,而不是更早的数据。

数据集可能非常大。

我想我可以用 db.collection.mapReduce 做到这一点。我找到了一个适用于所有消息的解决方案,但不是按类别分开的。指向正确方向的指针将不胜感激。

最佳答案

当您可以通过简单的聚合做到这一点时,没有理由使用 mapReduce:

db.messages.aggregate([
{$match: { createdAt: { $gte: ISODate('2018-01-01') } }},
{$group: {
_id: {date: {$dateFromParts:{
year: { $year: "$createdAt" },
month: { $month: "$createdAt" },
day: { $dayOfMonth: "$createdAt" },
hour: { $dayOfMonth: "$createdAt" },
minute: { $minute: "$createdAt" }
}},
category: "$category"
},
count: { $sum: 1 }
}
}
])

关于javascript - MongoDB mapReduce 每分钟文档计数由附加类别字段分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49227491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com