Mongooses - 如何在过去两周内获得数据更改

时间:2017-11-21 09:53:14

标签: node.js mongodb mongoose

假设我有一个书架构。它的领域很少。

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[]归零。 请告诉我一个更有效的解决方案。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我会创建一个新数组,我会保留数据发生的每次更改的日期。

{
  ...,
  likes: [Date],
}

然后以这种方式请求改变最后两周:

collection.find({
  likes: {
    $gte: Date.now() - 1209600000,
  },
});

这个解决方案将使您在两周后保持数据。

您可以定期删除它们,也可以保留它们并允许您稍后更改您的功能。如果下个月您需要3周的数据怎么办?始终认为通用和进化。