2017-02-13 3 views
0
Meteor.publish('mountCarmelData', function dataPublication(){ 
    return MountCarmel.find({}, 
    { 
     sort: {created_at: -1} 
    }); 
}); 

過去24時間のデータのみを公開するようにこのパブリケーションを制限する方法はありますか?私は 'created_at'と呼ばれる各レコードにタイムスタンプを持っています。最後の24時間分のデータをクライアントに送信するだけで、Meteorにコレクションを公開するにはどうすればいいですか?

+2

[日付に基づくクエリの返り値]の可能な複製(0120-912-03) – chazsolo

答えて

2

で成功しました現在の日付:あなたの出版物で次に

let yesterday = moment().subtract(24, 'hours').toDate();

Meteor.publish('mountCarmelData', function dataPublication(){ 
    return MountCarmel.find(
    { 
     createdAt: { $gte : yesterday } 
    }, 
    {}); 
}); 

サーバでのソートでもドキュメントがMiniMongoでソートされないため、「ソート」を削除しました。 BlazeヘルパーまたはReact Containerで 'sort'を追加する必要があります。

+3

あなたのコードの 'yesterday'はモーメントオブジェクトであり、日付またはタイムスタンプ。あなたはそれをチェックする前におそらく変換する必要があります。 – chazsolo

+0

@chazsoloそれを指摘してくれてありがとう! – Sean

0

クエリを作成して必要な処理を実行できますが、サブスクリプションが古いデータを削除せずにクライアントにデータをプルする方法に問題があります。これは、クライアント上のデータをフィルタリングして24時間分のデータしか表示しないようにすることで対処できますが、アプリを実行したままにすると、コレクションが大きくなり、ブラウザでメモリが過剰に使用される可能性があります。

ちょうど24時間分のデータを収集することをお勧めします。これにより、単にデータを購読するだけで、クライアント側で処理するほうがずっと簡単になります。

はこの質問を見てくださいと同様のシナリオのために答える:Publish only things who were read 10seconds ago from now

@jeromeは、あなたが正確に24時間未満であるタイムスタンプを取得するためにmoment.jsを使用することができ、この技術

関連する問題