【mongodb】存储当前时间用什么格式??

杨成功
  • 2.5k

我直接用Date.now(),存到数据库的格式是这样:

ISODate("2017-07-11T01:25:55.448+08:00")

如果按照这种格式存,那么我在查询的时候希望返回格式是这样:

2017-07-11 11:23:34

如何查询?求代码

或者存储其他格式,查询返回同样的结果,也欢迎指导

回复
阅读 6.6k
5 个回答
✓ 已被采纳

mongodb Date Aggregation Operators文档地址:https://docs.mongodb.com/manu...
$dateToString这个需要 mongodb3.0以上才支持
源数据

db.getCollection('devices').insert([
{
    "_id" : ObjectId("593d1df123aa5c000ea57b80"),
    "Last_Modify_Time" : 1.0,
    "Last_Modify_By" : 1.0,
    "Creation_Time" : ISODate("2017-06-11T10:39:45.000Z")
},{
    "_id" : ObjectId("593e7091e2bdc3000e4cdca3"),
    "Last_Modify_Time" : 2.0,
    "Last_Modify_By" : 2.0,
    "Creation_Time" : ISODate("2017-06-12T10:44:33.000Z")
},{
    "_id" : ObjectId("5949106bd4e170000e544c1a"),
    "Last_Modify_Time" : 3.0,
    "Last_Modify_By" : 3.0,
    "Creation_Time" : ISODate("2017-06-20T12:09:15.000Z")
},{
    "_id" : ObjectId("593ced72c4162e000e7e9611"),
    "Last_Modify_Time" : null,
    "Last_Modify_By" : null,
    "Creation_Time" : ISODate("2017-06-11T07:12:50.000Z")
}
])

SQL 语句

db.getCollection('devices').aggregate([
{
    $project: {
        'date': {
            // 将Creation_Time字段加上8*60*60*1000毫秒后,再格式化时间
            $dateToString: {format: "%Y-%m-%d %H:%M:%S", date: {$add:['$Creation_Time',28800000] } }
        },
        'Last_Modify_Time': '$Last_Modify_Time',
        'Last_Modify_By': '$Last_Modify_By'
    }
}
])

结果

/* 1 */
{
    "_id" : ObjectId("593d1df123aa5c000ea57b80"),
    "Last_Modify_Time" : 1.0,
    "Last_Modify_By" : 1.0,
    "date" : "2017-06-11 18:39:45"
}

/* 2 */
{
    "_id" : ObjectId("593e7091e2bdc3000e4cdca3"),
    "Last_Modify_Time" : 2.0,
    "Last_Modify_By" : 2.0,
    "date" : "2017-06-12 18:44:33"
}

/* 3 */
{
    "_id" : ObjectId("5949106bd4e170000e544c1a"),
    "Last_Modify_Time" : 3.0,
    "Last_Modify_By" : 3.0,
    "date" : "2017-06-20 20:09:15"
}

/* 4 */
{
    "_id" : ObjectId("593ced72c4162e000e7e9611"),
    "Last_Modify_Time" : null,
    "Last_Modify_By" : null,
    "date" : "2017-06-11 15:12:50"
}

存到数据库里的时间是这种格式,展现的话取出来用 moment 处理一下即可。http://momentjs.com/docs/#/pa...

const moment = require('moment');
moment("2017-07-11T01:25:55.448+08:00").format('YYYY-MM-DD HH:mm:ss'); //2017-07-11 11:23:34

另外其实你可以直接用 String 类型而不是 Date 类型去存时间,这样就不用额外处理。

Javascript原生没有支持对Date类型的格式化方法,所以不依赖第三方库的话是不好格式化的。取决于你格式化是想达到什么目的,建议可以选择:

  1. 如果是使用程序读取数据,可以在读到程序端后再进行转换。常用的语言一般都有对日期类型比较完善的支持。

  2. 如果是在mongo shell中,可以使用aggregation$dateToString,链接中有示例。

MongoDB的date在Node.js驱动中直接使用的Javascript的date数据类型,Javascript的date数据类型大部分情况都够用了。

请参看:https://segmentfault.com/n/13...

另外,上面也有高手提到来了moment.js,用的人也灰常多。

Love MongoDB!Have fun!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏