1

各ドキュメントにはタイムスタンプがあるため、特定の年齢のドキュメントを見つけるのは簡単です。

経過日数 % 3 == 0 のドキュメントを見つけるにはどうすればよいですか? Ruby で行うのは簡単ですが、ほとんどのドキュメントは必要ないので、Mongo で関連ドキュメントを探したほうがよいでしょう。

なんで?

要件は、3 日に 1 回ユーザーにリマインダーを送信することです。毎日 (または 1 時間) 実行するようにタスクをスケジュールできます。1 つの方法として、タスクを 3 日に 1 回実行することもできますが、サインアップしてから 4 ~ 6 日後ではなく、3 日後にリマインダーを送信することをお勧めします。

また、これは非常にエレガントなアプローチではないようです。ドキュメントに対して 3 日に 1 回アクションを実行するより良い方法はありますか?

シナトラ + ヘロク + モンゴ。

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 に答える