首页 > 解决方案 > 将猫鼬中的字符串日期与 Date.now() 或 new Date() 进行比较

问题描述

我在 MongoDB 中保存了一个字符串日期,如下所示:'19 Dec 2019'。我想用 new Date() 即当前日期获取所有匹配日期。

Mongo 存储日期:

db_date: '2019 年 12 月 18 日'

. 将此日期与当前日期匹配,我们使用

当前日期:新日期();

并返回一个匹配数组。

Model.find() ???

标签: javascriptnode.jsmongodbdatemongoose

解决方案


请试试这个:

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!


推荐阅读