mongoose:找出日期条目之间的最大时差

时间:2017-09-25 15:14:47

标签: javascript mongodb mongoose

我有一个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

我有一个应用程序,每隔一段时间运行一些代码。我希望将请求分开(每天为每个用户运行),以便它们尽可能远离彼此。我可能完全以错误的方式看待这个问题,所以如果你有更好的解决方案,请告诉我。

1 个答案:

答案 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}
])