javascript - 将猫鼬中的字符串日期与 Date.now() 或 new Date() 进行比较
问题描述
我在 MongoDB 中保存了一个字符串日期,如下所示:'19 Dec 2019'。我想用 new Date() 即当前日期获取所有匹配日期。
Mongo 存储日期:
db_date: '2019 年 12 月 18 日'
. 将此日期与当前日期匹配,我们使用
当前日期:新日期();
并返回一个匹配数组。
Model.find() ???
解决方案
请试试这个:
db.yourCollectionName.aggregate([{
$addFields: {
/** converting month from string to num :: Dec to 12 & extracting date & year from string */
month: {
$indexOfArray: [[, "Jan", "Feb", "Mar", "Aprl", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]
, { $arrayElemAt: [{ $split: ['$db_date', " "] }, 1] }]
}
, date: { $toInt: { $arrayElemAt: [{ $split: ['$db_date', " "] }, 0] } }, year: { $toInt: { $arrayElemAt: [{ $split: ['$db_date', " "] }, 2] } }
}
}, {
/** db_date is being converted to format ISODate() from parts year + month + day & then to this : "2019-12-18" */
$addFields: {
db_date: {
$dateToString: {
format: "%Y-%m-%d", date: {
$dateFromParts: {
'year': '$year', 'month': '$month', 'day': '$date'
}
}
}
}
}
}, { $project: { 'month': 0, 'year': 0, 'date': 0 } },
{
/** Here we're converting ISODate() from input to like this : "2019-12-19", This is what you actually asked for */
$match: {
$expr: {
$eq: ['$db_date', {
$dateToString: {
format: "%Y-%m-%d", date: new Date()
}
}]
}
}
}
])
此查询应该可以帮助您获得所需的结果,但在我看来,进行这种转换是一项艰巨的任务,您通常可以通过在数据库设计时考虑您的事务然后将数据存储在数据库中来克服这个问题您的阅读要求,如果不是 - 以另一种方式,可以通过将代码中的输入转换为与存储在 DB 中的数据相匹配来简化您的 DB!
推荐阅读
- python - 如何绘制带有逆变换(实际)值的 graphviz 决策树?
- javascript - 使用表单在数据库中保存/更新设置并使用模板中的这些设置构建 HTML
- sql - 从联合语句插入新表时出现数据转换错误
- ruby-on-rails - rails to_json 引用十进制值
- reactjs - 如何让等待在 React 中与 redux Saga 一起工作?
- vue.js - 模拟数据关闭时如何向服务器写入发布请求?
- arrays - Ruby FFI to call C function with array of arrays
- docker - How to accept the license agreement when building rti-connext-dds-5.3.1 with docker build?
- javascript - 我需要在按下相等按钮时计算 setState 中的两个值
- arrays - Accumulating data based on two criteria