2016-06-23 9 views
0

Mongo dBでSQLのようなビューを作成しようとしています。私はこれが直接達成できないことを知っているので、私は集約関数を作成しました。この複雑な集約関数は、私が行う必要があるものを正確に行い、新しいコレクションに値をロードします。Mongo DBのコレクションを自動的に更新する

db.User.aggregate([ 
    {$limit:5} 
    {$lookup: { 
    from: "Interactions", 
    localField: "_id", 
    foreignField: "userId", 
    as: "InteractionsView"} 
     }, 
    {$project: { 

     "userCount": "$User.Count", 
     . 
     . 
     . 
     . //(All fields i need are added here) 

    "InteractionsView.Pages" : { 
    $filter: { 
     input: "$InteractionsView.Pages", 
     as: "num", 
     cond: { $gte: [ "$$num.Datetime", new Date("2015-06-14T20:15:31Z")] } 
    } 
    } 
}}, 
{$out:"ReportView"} 

]) 

    db.ReportView.find({}); 

私はビューを使用することはできませんので、私はビューとしての役割を果たすことができるように頻繁にこのコレクションを更新しようとしています、今。これは良いですし、クエリが動作します。スケジューラのようなオプションがありますか?10分ごとに実行するように設定することができますか?そうするために利用可能な新しいアウトオブボックスオプションがありますか?または私はそれを完全にすべて間違っているのですか?

答えて

0

mongodbでタスクをスケジュールするためのサポートは組み込まれていませんが、 job scheduling in mongodb?

ただし、オペレーティングシステムレベルのサポート(Linuxの場合はCronjobs用)を使用してタスクをスケジュールすることができます。

0

IMHOこれは、リレーショナル・シンキングをドキュメント・ストアに投影するのに悪い考えです。

あなたが提供するクエリは5つの文書や実行時間に制限されている場合に許容され、その後、私は5分に設定TTLで、キーと値の形で結果を格納するためのRedisのような使用のキャッシュサーバを提案します、または単にキャッシュを作成サーバー上のオブジェクト。

最も単純な形式では、リクエストごとに同じクエリを実行し、データベースエンジンによって提供されるキャッシュメカニズムを利用できます。

パフォーマンスを考えると、新しいコレクションを作成するには常にディスクが必要です。メモリ結果を再利用すると、より速くスムーズに再生されます。

アビーコメント歓迎!

関連する問題