首页 > 解决方案 > 如何将集合“日期”值更新为 YYYY-MM-DD?

问题描述

我在 MESSAGES 集合中有一些 DATE 值,如下所示:

{ "Date" : "15-07-2014 11:48:14" }
{ "Date" : "15-07-2014 11:48:14" }
{ "Date" : "16-07-2014 13:37:44" }
{ "Date" : "16-07-2014 13:37:44" }
{ "Date" : "16-07-2014 13:37:49" }
{ "Date" : "16-07-2014 13:37:49" }

如何更改集合以使日期值表示为 YYYY-MM-DD?

我一直在查看函数 $dateFromString 但这看起来像是应用于查询并且不确定这是否可以永久应用于集合。

标签: mongodb

解决方案


我们可以使用$out将指定集合的​​数据替换为聚合输出。以下查询将永久更新messages集合。

db.messages.aggregate([
    {
        $addFields:{
            "Date":{
                $dateToString:{
                    "date":{
                        $toDate:"$Date"
                    },
                    "format":"%Y-%m-%d %H:%M:%S"
                }
            }
        }
    },
    {
        $out:"messages"
    }
]).pretty()

前:

{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09ef"),
    "Date" : "15-07-2014 11:48:14"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f0"),
    "Date" : "15-07-2014 11:48:14"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f1"),
    "Date" : "16-07-2014 13:37:44"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f2"),
    "Date" : "16-07-2014 13:37:44"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f3"),
    "Date" : "16-07-2014 13:37:49"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f4"),
    "Date" : "16-07-2014 13:37:49"
}

后:

{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09ef"),
    "Date" : "2014-07-15 11:48:14"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f0"),
    "Date" : "2014-07-15 11:48:14"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f1"),
    "Date" : "2014-07-16 13:37:44"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f2"),
    "Date" : "2014-07-16 13:37:44"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f3"),
    "Date" : "2014-07-16 13:37:49"
}
{
    "_id" : ObjectId("5d728d92eb1b7fdde7ea09f4"),
    "Date" : "2014-07-16 13:37:49"
}

推荐阅读