假设我有一个书架构。它的领域很少。
const Book = new schema({
title: String,
content: String,
like: Number
});
如何获得过去两周内最受欢迎的书? 最重要的是,它需要每天更新。
例如,假设我现在只需要过去两天的喜欢。 5 人们喜欢这本书完全在第1天, 7 的人喜欢第2天的书, 3 的人在第3天。因此,我预计 12喜欢(5 + 7)在第2天, 10喜欢在第3天(7 + 3)
我打算添加一个字段和一个14元素的数组。
{
...,
likeCnt: {
type: Array,
default: Array(14).fill(0)
}
}
因此,当有人喜欢这本书时,只更新Date().getDate() % 14
元素。
但是,我需要每天使用cron-job将每本书likeCnt[]
归零。
请告诉我一个更有效的解决方案。
非常感谢。
答案 0 :(得分:0)
我会创建一个新数组,我会保留数据发生的每次更改的日期。
{
...,
likes: [Date],
}
然后以这种方式请求改变最后两周:
collection.find({
likes: {
$gte: Date.now() - 1209600000,
},
});
这个解决方案将使您在两周后保持数据。
您可以定期删除它们,也可以保留它们并允许您稍后更改您的功能。如果下个月您需要3周的数据怎么办?始终认为通用和进化。