1

每个文档都有一个时间戳,因此查找给定年龄的文档很简单。

如何查找年龄为 % 3 == 0 的文档?在 Ruby 中做起来很简单,但是大部分文档都不需要,所以最好在 Mongo 中找到相关文档。

为什么?

要求是每 3 天向用户发送一次提醒。我可以安排一个任务每天(或每小时)运行。一种方法是每 3 天运行一次任务,但最好在他们注册后 3 天发送提醒,而不是在 4-6 天后发送。

此外,这似乎不是一个非常优雅的方法。有没有更好的方法可以每 3 天对文档执行一次操作?

西纳特拉 + Heroku + Mongo。

4

1 回答 1

2

假设:您的数据库中有以下带有时间戳的文档。

> db.dinner.find()
{ "_id" : ObjectId("527d4edc6acba77bbdbcdbc5"), "timestamp" : 1383857393558, "dinner" : "strawberries" }
{ "_id" : ObjectId("527d4ee96acba77bbdbcdbc6"), "timestamp" : 1383770993558, "dinner" : "cherries" }
{ "_id" : ObjectId("527d4f116acba77bbdbcdbc7"), "timestamp" : 1383684593558, "dinner" : "blueberries" }
{ "_id" : ObjectId("527d4fa36acba77bbdbcdbc8"), "timestamp" : 1383943793558, "dinner" : "cranberries" }
> 

然后,您可以使用以下代码找到 0、3、6、9、... 天前创作的所有文档:

today = new Date();
db.dinner.find().forEach(
  function(entry) {
    daysAgo = Math.floor((today.getTime() - entry.timestamp) / 1000 / 60 / 60 / 24);
    if (daysAgo % 3 == 0) printjson(entry);
  }
)
于 2013-11-08T21:18:23.917 回答