2017-09-25 74 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} 
])