如何查询MongoDB中两个Date字段时间差大于指定值的文档
MongoDB查询时间差大于10天的文档
要筛选出last_update_local_datetime与start_local_datetime时间差超过10天的文档,有两种简洁的实现方式:
方法1:基于毫秒数计算(兼容所有MongoDB版本)
利用$expr允许在查询条件中使用聚合表达式,通过$subtract计算两个日期字段的毫秒差,再与10天对应的毫秒数对比:
db.your_collection_name.find({ $expr: { // 若需要严格大于10天,将$gte改为$gt $gte: [ { $subtract: ["$last_update_local_datetime", "$start_local_datetime"] }, 10 * 24 * 60 * 60 * 1000 // 10天 = 10*24小时*60分钟*60秒*1000毫秒 ] } })
方法2:使用$dateDiff(MongoDB 5.0及以上版本)
MongoDB 5.0新增了$dateDiff操作符,可以直接计算两个日期的天数差,代码可读性更强:
db.your_collection_name.find({ $expr: { $gt: [ { $dateDiff: { startDate: "$start_local_datetime", endDate: "$last_update_local_datetime", unit: "day" // 指定计算单位为天 } }, 10 ] } })
注意
如果你的实际字段是示例中的terminate_local_datetime(而非问题描述的last_update_local_datetime),只需将代码中的字段名替换即可。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

