MongoDB中使用长整型时间戳过滤日期字段问题求助
用毫秒数过滤MongoDB日期字段失败的问题解决
你在find()查询里直接使用聚合操作符$toDate是错误的——$toDate属于聚合表达式操作符,只能在聚合管道的阶段(比如$match、$project)中使用,不能直接用于常规find()的查询条件里,这就是过滤失败的核心原因。
下面是两种可行的解决方法:
方法一:在查询条件中直接构造日期对象
直接用ISODate()或new Date()把毫秒数转换成MongoDB可识别的日期类型,就能正常过滤:
// 用ISODate构造日期 db.testColl.find( {createDate: {$gte: ISODate(1608947820333)} } ) // 或者用new Date(),效果完全一致 db.testColl.find( {createDate: {$gte: new Date(1608947820333)} } )
方法二:改用聚合管道的$match阶段
如果必须使用$toDate操作符,就把查询放到聚合管道的$match阶段中执行,聚合管道支持所有聚合表达式操作符:
db.testColl.aggregate([ { $match: { createDate: {$gte: {$toDate: 1608947820333}} } } ])
补充说明:常规find()的查询条件仅支持查询操作符(如$gte、$eq),不支持聚合类的表达式操作符,所以直接在find()里写$toDate会被当成无效的查询条件,导致无法匹配到数据。
内容的提问来源于stack exchange,提问作者enem
相关产品推荐
相关产品推荐

