2016-06-23 102 views
0

所以我想在Mongo dB中創建一個像SQL這樣的視圖。由於我知道這不能直接實現,所以我創建了一個聚合函數。這個複雜的聚合函數正是我需要做的,並將這個值加載到一個新的集合中。MongoDB自動更新集合

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中的ex Cronjobs)來安排您的任務。

0

恕我直言,這是一個壞主意,在文檔存儲項目關係思維。

如果您提供的查詢限制爲5個文檔且執行時間可以接受,那麼我會建議像redis一樣使用緩存服務器將結果存儲在TTL設置爲5分鐘的鍵值形狀中,或者簡單地創建一個緩存服務器上的對象。

以最簡單的形式,您可以對每個請求執行相同的查詢,並利用數據庫引擎提供的緩存機制。

思考性能創建新集合始終是磁盤密集型的,重用內存結果將發揮更快,更平滑。

艾比評論歡迎!