MongoDB:将现有文档从ISO日期转换为字符串

时间:2018-03-26 20:12:21

标签: mongodb mongodb-query aggregation-framework

        {
        "_id" : 1.0,
        "item" : "abc",
        "date" : ISODate("2014-01-21T08:15:39.736Z")
    }
    {
        "_id" : 2.0,
        "item" : "def",
        "date" : ISODate("2015-01-14T08:15:39.736Z")
    }
    {
        "_id" : 3.0,
        "item" : "absc",
        "date" : ISODate("2017-06-17T08:15:39.736Z")
    }
.........
.........

我在数据库中存在数百万条数据,并且我需要将所有现有数据“date”字段值从ISO日期更新为正常字符串,如“2017 -01-21“(YYYY-MM-DD)。可以通过在MongoDB中使用查询或函数来实现吗?

3 个答案:

答案 0 :(得分:0)

您可以使用$dateToString运算符:

db.test.aggregate([ {$project: { item: 1, date: { $dateToString: { format: "%Y-%m-%d", date: "$date"}}}}])

这将产生:

{ "_id" : 1, "item" : "abc", "date" : "2014-01-21" }
{ "_id" : 2, "item" : "def", "date" : "2015-01-14" }
{ "_id" : 3, "item" : "absc", "date" : "2017-06-17" }

更多阅读可在此处找到 - https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/

答案 1 :(得分:0)

这将更新所有集合。确保你有备份。

db.collection.aggregate([
        { "$addFields": { "date":  {$dateToString: { format: "%Y-%m-%d", date: "$date" }} }},
        { "$out": "collection" }
    ])

答案 2 :(得分:-1)

试试此代码

db.collectionName.find().forEach(function (doc) {    
 var month = ("0" + (doc.date.getMonth() + 1)).slice(-2)
 var day = ("0" + doc.date.getDate()).slice(-2)   
 var year = doc.date.getFullYear()
 db.iso.update({_id: doc._id}, {$set:{date: year + "-" + month + "-" + day}})
});