MongoDB查询:如何筛选endDate加3天后早于今日的文档
MongoDB查询:筛选endDate加3天后早于今日的文档
你需要筛选出endDate字段加3天后仍早于今日的文档,与其在查询中对每个文档的endDate做计算,更高效的方式是反向计算时间阈值——把当前时间减去3天,然后查询endDate小于这个阈值的文档,这样能利用endDate字段的索引,大幅提升查询性能。
修改后的代码如下:
const myCollection = DB_CONNECTION.collection(TRANSACTION); // 计算当前时间减去3天的日期对象 const threeDaysAgo = new Date(); threeDaysAgo.setDate(threeDaysAgo.getDate() - 3); let expiredTrans = await myCollection.find({ "endDate": { $lt: threeDaysAgo }}).toArray();
如果确实需要在MongoDB查询内部做日期计算(不推荐,因为无法利用索引,数据量大时性能会很差),可以用聚合查询实现:
const myCollection = DB_CONNECTION.collection(TRANSACTION); let expiredTrans = await myCollection.aggregate([ { $addFields: { // 给每个文档添加endDate加3天的临时字段 endDatePlus3: { $add: ["$endDate", 3 * 24 * 60 * 60 * 1000] } } }, { $match: { endDatePlus3: { $lt: new Date() } } } ]).toArray();
优先用第一种反向计算阈值的方案,尤其是数据集较大时,性能优势会非常明显。
内容的提问来源于stack exchange,提问作者MDL
相关产品推荐
相关产品推荐

