在MongoDB查询输出中格式化日期

12
我想在Mongo shell输出中将日期时间格式化为特定的格式。
我的查询:
db.getCollection('people').find({
        date: { 
            $gte: ISODate("2017-04-24T14:04:34.447Z") 
        }
    },
    {
        _id: 0,
        age: 0,

    }
);

我对这个查询的输出结果是:

/* 1 */
{
    "user_id" : "bcd020",
    "status" : "D",
    "date" : ISODate("2017-04-24T14:04:34.447Z")
}

/* 2 */
{
    "user_id" : "bcd021",
    "status" : "D",
    "date" : ISODate("2017-04-24T14:04:34.447Z")
}
我希望您能将输出的日期时间格式化为以下形式,
/* 1 */
    {
        "user_id" : "bcd020",
        "status" : "D",
        "date" : 2017-04-24 14:04:34
    }

    /* 2 */
    {
        "user_id" : "bcd021",
        "status" : "D",
        "date" : 2017-04-24 14:04:34
    }

5
在聚合管道中使用以下代码:{ $project: { date: { $dateToString: { format: "%Y-%m-%d %H:%M:%S", date: "$date" } } } }此代码用于将日期字段 $date 转换成格式为 %Y-%m-%d %H:%M:%S 的字符串形式,并将其作为新的 date 字段输出。 - s7vr
是的,我在Mongo文档中也看到了这一点,所以没有聚合是不可能的吗? - Abdul Moiz
我觉得不太可能。你可能只能获得文档,使用javascript迭代并格式化日期。 - s7vr
好的,谢谢Veeram。如果您可以,请用JavaScript方式回答。 - Abdul Moiz
Np. ISODate只是JavaScript日期的包装器。因此,您应该能够执行常规日期对象上执行的所有操作。看看这是否有帮助。https://dev59.com/8HA65IYBdhLWcg3w7Taa - s7vr
1个回答

11
解决方案是使用聚合管道,正如评论区中Veeram所述。
db.getCollection('people').aggregate([
    {
        $project:{
            datetime: {$dateToString: {format: "%G-%m-%d %H:%M:%S",date: "$datetime"}},
            age : 1
        }
    }
]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接