在mongodb中存储日期/时间的最佳方式

时间:2010-09-23 12:38:42

标签: datetime date mongodb

我见过使用字符串,整数时间戳和mongo日期时间对象。

2 个答案:

答案 0 :(得分:179)

最好的方法是存储原生JavaScript Date objects,其映射到BSON native Date objects

> db.test.insert({date: ISODate()})
> db.test.insert({date: new Date()})
> db.test.find()
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:42.389Z") }
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:57.240Z") }

本机类型支持开箱即用的各种有用方法,例如,您可以在map-reduce作业中使用。

如果需要,您可以分别使用Date方法和getTime()构造函数轻松地将Date(milliseconds)对象转换为Unix时间戳 1)

1)严格地说,Unix时间戳是在中测量的。自Unix时代以来,JavaScript Date对象的测量值为毫秒

答案 1 :(得分:49)

一个日期戳已经在_id对象中,表示插入时间

因此,如果插入时间是您所需要的,那么它已经存在:

登录mongodb shell

ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test

通过插入项目

创建数据库
> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 

让这个数据库成为我们现在的数据库

> use penguins
switched to db penguins

获取行:

> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }

以yyyy-MM-dd获取每一行HH:mm:ss格式:

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53

如果最后一行内容让您感到困惑,我会详细介绍一下这方面的工作原理:https://stackoverflow.com/a/27613766/445131

Protip,MongoDB是最好的数据库,因为MongoDB是网络规模的:https://www.youtube.com/watch?v=b2F-DItXtZs