如何使用猫鼬在Node.js中转换日期格式

时间:2018-12-26 12:41:15

标签: node.js mongodb mongoose

我有一个像这样的文件

{
            "_id": "5c2326cb5d558f6693577119",
            "date": "08/02/16 00:00",
            "symbol": "WLTW",
            "open": "113.300003",
            "close": 111.160004,
            "low": 110.459999,
            "high": 113.300003,
            "volume": 1200500,
            "createdAt": "2018-12-26T06:59:23.901Z",
            "updatedAt": "2018-12-26T06:59:23.901Z"
        }

我正在执行类似这样的查询

const getStockBySymbol = (data) => {
    console.log('Hitting Stock Model fine!!')
    return Stock.find({symbol: data})
        .then((stocks) => {
            console.log(stocks)
            if (stocks) { return stocks }
        })
}

我需要将date格式转换为Year-month-date格式

所以当前格式是dd\mm\yy属性中的date,我想将其转换为yyyy-mm-dd

我是MongoDB的新手,如果有人可以帮助

谢谢

3 个答案:

答案 0 :(得分:1)

您需要在获取数据后映射结果:

const getStockBySymbol = (data) => {
    return Stock.find({symbol: data})
        .then((stocks) => {
            if (stocks) { 
            var newStocks=stocks.map(function(stock){
             let formattedDate=moment(stock.date,"dd/mm/YY hh:mm").format("YYYY-mm-dd");
             stock.date=formattedDate;
             return stock;
            });
            return newStocks;
            }
        })
}

答案 1 :(得分:0)

您最好的选择是使用momentjs库。这是用于时间格式转换的简便解决方案:

moment(new Date(date)).format('YYYY-MM-DD');

这应该产生'2016-08-02'。

答案 2 :(得分:0)

您可以使用$dateFromString运算符将字符串解析为ISODate。问题在于,年份的所有格式都期望四位数,因此它将解析您的年份为0016,而不是预期的2016。要解决此问题,您可以使用$dateToParts$dateFromParts并手动添加2000。然后,您可以使用$dateToString将其转换为您的格式,请尝试:

Stockdb.aggregate([
    {
        $match: { symbol: "WLTW" }
    },
    {
        $addFields: {
            date: {
                $dateToParts: {
                    date: { $dateFromString: { dateString: "$date", format: "%d/%m/%Y %H:%M" } }
                }
            }
        }
    },
    {
        $addFields: {
            date: {
                $dateToString: {
                    date: {
                        $dateFromParts: {
                            day: "$date.day",
                            month: "$date.month",
                            year: { $add: [ 2000, "$date.year" ] }
                        }
                    },
                    format: "%Y-%m-%d"
                }
            }
        }
    }
])

$addFields在这种情况下会覆盖现有字段

编辑:对于较低的MongoDB版本,您可以使用$substr$concat运算符,假设您的date具有固定长度:

Stockdb.aggregate([
    {
        $match: { symbol: "WLTW" }
    },
    {
        $addFields: {
            date: {
                $concat: [
                    '20',
                    { $substr: [ "$date", 6, 2 ] },
                    '-',
                    { $substr: [ "$date", 3, 2 ] },
                    '-',
                    { $substr: [ "$date", 0, 2 ] },
                ]
            }
        }
    }
])