2017-09-25 53 views
0

我有一個mongo db並使用貓鼬。是否有可能找到日期之間的最大差距?所以,如果我有:貓鼬:找到日期條目之間的最大時差

LastUpdate: 2017-09-25 12:30:41.814Z 
LastUpdate: 2017-09-25 12:31:41.814Z 
LastUpdate: 2017-09-25 12:35:41.814Z 
LastUpdate: 2017-09-25 12:36:41.814Z 
LastUpdate: 2017-09-25 12:37:41.814Z 
LastUpdate: 2017-09-25 12:39:41.814Z 

這將返回:

LastUpdate: 2017-09-25 12:31:41.814Z 
LastUpdate: 2017-09-25 12:35:41.814Z 

甚至更​​好,中間點之間的日期:

LastUpdate: 2017-09-25 12:33:41.814Z 

我有一個運行一些代碼,每一個應用程序很經常。我想將請求分隔開(每天爲每個用戶運行),以便儘可能遠離彼此運行。我可能完全以錯誤的方式看待這個問題,所以如果你有更好的解決方案,讓我知道。

+0

當然有可能。獲取LastUpdate排序的所有記錄,並通過遍歷結果來計算差距。 –

+0

@AlexBlex是我的後備計劃,但我希望有一些奇特的查詢可以幫我節省一些處理時間。 –

+0

我已經發布了一個示例,說明它可能如何完成,但它幾乎不會爲您節省任何東西。請參閱管道中的評論。 –

回答

0

儘管可以通過下面的「奇妙查詢」來實現,但我建議計算應用程序級別上的差距以「節省一些處理時間」。

db.collection.aggregate([ 
    { $sort: {LastUpdate: 1} }, 
    // doubles the dataset 
    { $facet: { 
     "first": [{ $match: {LastUpdate:{$exists: true}}}], 
     "second": [{ $match: {LastUpdate:{$exists: true}}}] 
    }}, 
    // squares it 
    { $unwind: { 
     path: "$second", 
     includeArrayIndex: "_num" 
    }}, 
    { $match: { _num : {$gt: 0}}}, 
    // returns back to the doubled size 
    { $project: { first: { $arrayElemAt: [ "$first", {$subtract: ["$_num", 1 ]}] }, second: 1}}, 
    // calculates the gap 
    { $project: { 
     first: 1, 
     second: 1, 
     gap: { $subtract: [ "$second.LastUpdate", "$first.LastUpdate" ] } 
    }}, 
    { $sort: {gap: -1}}, 
    { $limit: 1} 
])