【发布时间】:2018-11-09 04:26:19
【问题描述】:
我想获取“FECHA_FIN”字段大于等于今天日期的记录。
这是我的数据示例:
但是有了这个查询:
db.getCollection('susp_programadas').find( {"FECHA_FIN":{ $gte: new Date("YYYY-mm-dd") }} )
【问题讨论】:
标签: mongodb
我想获取“FECHA_FIN”字段大于等于今天日期的记录。
这是我的数据示例:
但是有了这个查询:
db.getCollection('susp_programadas').find( {"FECHA_FIN":{ $gte: new Date("YYYY-mm-dd") }} )
【问题讨论】:
标签: mongodb
您可以将日期转换为 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() }}}
])
您可以在带有$match 的聚合查询中使用$dateFromString 来获得您想要的结果。请注意,$dateFromString 仅适用于 MongoDB 3.6 及更高版本。
如果没有办法将您的数据转换为 ISODate 或升级您的数据库,您还可以考虑通过$where 的另一种解决方案:
db.getCollection('susp_programadas').find({
$where: function(){
return new Date(this.FECHA_FIN) > Date.now()
}
})
但是,该解决方案存在以下事实:$where不能使用索引,因此请记住这一点。
【讨论】:
$dateFromString 来自 3.6 及更高版本。
ISODate 或升级您的数据库。我发布了另一种性能不佳的解决方案,它绝不是最佳实践。