mongodb - 我无法获取当前日期之后的日期
问题描述
我想获取“FECHA_FIN”字段大于等于今天日期的记录。
这是我的数据示例:
但有了这个查询:
db.getCollection('susp_programadas').find( {"FECHA_FIN":{ $gte: new Date("YYYY-mm-dd") }} )
解决方案
您可以将日期转换为 ISO 日期并以这种方式进行查询。由于您将日期存储为字符串,mongo 不知道如何在不转换的情况下根据 ISO 日期查询它。
如果您将日期存储在 mongo 作为默认 ISO 日期,那么您可以轻松完成此操作:
db.getCollection('susp_programadas').find({"FECHA_FIN":{$gte: new Date()}})
所以你现在可以这样做:
db.getCollection('susp_programadas').aggregate([
{
$project: {
date: { $dateFromString: { dateString: '$FECHA_FIN' }}
}
},
{ $match: { date: { $gte: new Date() }}}
])
您可以在带有 a 的聚合查询中使用$dateFromString$match
来获得所需的结果。请注意,$dateFromString 仅在MongoDB 版本 3.6 及更高版本中可用。
如果无法将您的数据转换为 ISODate 或升级您的数据库,您还可以考虑另一种解决方案,通过$where
:
db.getCollection('susp_programadas').find({
$where: function(){
return new Date(this.FECHA_FIN) > Date.now()
}
})
但是,该解决方案存在$where
无法使用索引的问题,因此请记住这一点。
推荐阅读
- r - 省略轴标签 - 轴是一个因素
- javascript - 如何将旧的(非事件驱动的)软件移植到 javascript
- ios - swift中使用mvvm模式的网络调用函数
- c++ - 无法通过引用函数“calcValues”中的变量“firstNum”和“secondNum”来更改值
- java - 如何解决时区和 SSL 的问题
- android - 我可以使用 NDK 访问设备文件(/dev/...)吗?
- java - Java - 无法导入 JIprolog 包
- php - Xdebug:如何禁用“xdebug.halt_level”
- node.js - 无法在 ember 中创建组件,每次都会遇到错误
- javascript - 如何从 jquery 对话框表中删除表的行?