Ответы:
Лучший способ - хранить нативные объекты JavaScript Date , которые отображаются на BSON-нативные объекты Date .
> 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") }
Собственный тип поддерживает целый ряд полезных методов из коробки, которые вы можете использовать, например, в заданиях на уменьшение карты.
Если вам нужно, вы можете легко конвертировать Date
объекты в метки времени Unix и из них 1) , используя getTime()
метод и Date(milliseconds)
конструктор соответственно.
1) Строго говоря, метка времени Unix измеряется в секундах . Объект JavaScript Date измеряется в миллисекундах с начала эпохи Unix.
389
и 240
- это миллисекунды метки времени. Z
В формате строки говорит MongoDB , что метка времени Предоставленный в UTC. Если вы затем прочитаете его обратно, ваше приложение, вероятно, преобразует его в местный часовой пояс, создавая впечатление, что время изменилось. Но время все равно, оно интерпретируется только с другой точки зрения. Например 12:50:42Z
и 13:50:42+01:00
представлять один и тот же момент времени.
21:56:03+01:00
прямо сейчас в CET и вы вставляете new Date()
, то MongoDB может представлять его как 20:56:03Z
. Но когда вы прочитаете его обратно и отобразите в своем приложении, используя настройки локального часового пояса (CET), оно будет прочитано 21:56:03
снова.
Так что, если время вставки - то, что вам нужно, оно уже там:
Войти в оболочку mongodb
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" }
Получить каждую строку в формате гггг-мм-дд чч: мм: сс:
> 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
_id
?
_id.getTimestamp()
.