我知道您可以在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/