我有一个mongo db并使用mongoose。是否有可能找到日期之间的最大差距?如果我有:
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 :(得分: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}
])