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

有什麼辦法限制這本刊物只發布過去24小時的數據嗎?每個記錄上都有一個名爲'created_at'的時間戳記。如何在Meteor發佈一個集合,將最近24小時的數據發送給客戶端?

+2

[基於日期的返回查詢]的可能重複(http://stackoverflow.com/questions/8835757/return-query-based-on-date) – chazsolo

回答

2

您可以使用moment.js得到一個時間戳,這正是小於24小時當前日期:

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

然後在您的刊物:

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

我已經刪除了'排序',因爲在服務器上排序不會導致您的文檔在MiniMongo中排序。您需要在Blaze助手或React容器中添加「排序」以使其工作。

+3

在你的代碼中'昨天'是一個時刻對象,而不是日期或時間戳。您應該在檢查之前將其轉換。 – chazsolo

+0

@chazsolo謝謝指出! – Sean

0

您可以創建一個查詢來執行您想要的操作,但問題在於訂閱將數據提取到客戶端而不刪除舊數據。您可以通過過濾客戶端上的數據來解決這個問題,以便它只顯示24小時的數據,但是如果應用程序仍在運行,集合將會變大,並且可能會佔用瀏覽器中的太多內存。

我會建議你有一個單獨的收集只有24小時的數據。這使得在客戶端處理更簡單,因爲您只需訂閱數據。

看一看這個問題,答案類似的情景:Publish only things who were read 10seconds ago from now

@jerome成功使用這種技術

相關問題