我知道您可以在Mongo管道中使用的基本数学运算符($ add,$ multiply,$ ceil等),但是我遇到一种情况,我想计算自某个日期以来经过的天数记录在数据库中。通常,我会通过获取现在和记录的日期之间的毫秒数差,然后将其转换回一天,来做到这一点,如下所示:

  let d = new Date();
  let todayValue = d.getTime();

  let visitDate = new Date(visitedAt);

  let visitDateValue = visitDate.getTime();

  let diffSinceVisitDateValue = todayValue - visitDateValue;

  let durationOfVisitDiff = moment.duration(diffSinceVisitDateValue, 'milliseconds');
  let daysSinceVisitDecimal = durationOfVisitDiff.asDays();

  let daysSinceVisited = Math.round(daysSinceVisitDecimal);


但是,有什么方法可以在Mongo视图的管道中处理该计算吗?根据我的理解,在Mongo视图中不能选择map / reduce。这让我想知道在Mongo视图中这种逻辑是否可行。

为了明确起见,这是一个仅在Mongo View中使用的值。这不是模型上的字段。

另外,如果还有其他选择,那么我很乐意听它是否可以将其值带入我的mongo视图。

最佳答案

该管道应该可以解决问题:

[ { $addFields: { days: { $trunc: { $divide: [ { $subtract: [ new Date(), '$date' ] }, 86400000] } } } } ]

这只是简单地将存储的Date减去它到当前日期,以毫秒为单位返回差值。之后,我们只需要除以86400000(一天中的毫秒数)并截断小数部分即可。

请注意,我假设该列名为“日期”,并且正在创建一个新列来保存名为“天”的结果。更新它以满足您的需求。

关于javascript - 在Mongo View 中处理数学计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49654479/

10-15 23:11