Лучший способ сохранить дату / время в mongodb

Я видел использование строк, целочисленных временных меток и объектов времени и монго.

Ответы на вопрос(2)

Одна метка даты уже находится в объекте _id, представляющем время вставки

Войти в оболочку mongodb

[email protected]:~$ 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

Protip, MongoDB - лучшая БД, потому что MongoDB - это веб-масштаб:https://www.youtube.com/watch?v=b2F-DItXtZs

 kmiyashiro13 июн. 2015 г., 00:45
@Redsandro нет, но потенциально они могут иметь тот же результат_id.getTimestamp().
 ledlogic28 сент. 2015 г., 07:54
Неважно, сортировать ({madeOn: -1); это подход к использованию изstackoverflow.com/questions/28599237/...
 ledlogic28 сент. 2015 г., 07:41
@kmiyashiro, вы случайно не знаете, как сортировать по этой отметке времени?
 Redsandro23 мая 2015 г., 14:02
Если ваша база данных очень быстрая и два документа хранятся в одну и ту же миллисекунду ... эти документы имеют одинаковую_id?
 Yuval A.27 янв. 2015 г., 15:14
Но это отметка времени, когда документ был сохранен в БД, иногда вы хотите сохранить даты и время, не связанные с датой вставки.
 diazdeteran24 янв. 2017 г., 16:27
Вот как MongoDB генерирует идентификаторы:docs.mongodb.com/manual/reference/method/ObjectId , Обратите внимание, что он не генерируется исключительно из метки времени создания (метка времени - это только первые 4 байта).
Решение Вопроса

Лучший способ - хранить нативный JavaScriptОбъекты даты, на какую карту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 объекты в и из отметок времени Unix1), с использованиемgetTime() метод иDate(milliseconds) конструктор соответственно.

1) Строго говоря, метка времени Unix измеряется всекунд, Объект JavaScript Date измеряет вмиллисекунды начиная с эпохи Unix.

 gh0st21 дек. 2016 г., 23:08
В оболочке монгоISODate() а такжеnew Date() оценивать так же. Что с этим?
 Aboozar Rajabi19 мар. 2017 г., 12:20
@NielsvanderRest Поскольку мой местный часовой пояс - центральноевропейское время (CET), и я хочу сохранить его, используя свой местный часовой пояс, я должен использовать этот формат:HH:MM:SS+01:00, Я прав?
 Thilo24 сент. 2010 г., 02:45
Как это будет храниться в БД? Как объект даты и времени Монго?
 Niels van der Rest25 сент. 2010 г., 08:16
@Thilo: Правильно, это в основном представление BSON объекта Date в JavaScript. Это 64-битное целое число, которое хранит миллисекунды с эпохи Unix и поддерживает (большинство?) Методов изСпецификация JavaScript.
 Thilo25 сент. 2010 г., 04:37
bsonspec.org/#/specification перечисляет тип данных «UTC datetime».
 Niels van der Rest24 сент. 2010 г., 10:04
@Thilo: MongoDB не имеет специального объекта datetime, насколько я знаю. Он использует тип даты JavaScript, который хранится в форме BSON.
 Aboozar Rajabi18 мар. 2017 г., 10:00
@NielsvanderRest В чем смысл 389Z и 240Z? И как я могу вставить свою собственную дату и время? Когда я вставляю что-то вродеISODate("2013-12-10T11:50:57Z"), это меняет время!
 Niels van der Rest19 мар. 2017 г., 22:05
@AboozarRajabi В общем, вы не хотите беспокоиться окак оно сохраняется до тех пор, пока начальный ввод верен. Если это21:56:03+01:00 прямо сейчас в CET и вы вставляетеnew Date()тогда MongoDB можетпредставлять это так же как20:56:03Z, Но когда вы прочитаете его обратно и отобразите в приложении, используя настройки локального часового пояса (CET), он будет читать21:56:03 снова.
 Niels van der Rest19 мар. 2017 г., 03:29
@AboozarRajabi The389 а также240 миллисекунды метки времени.Z вформат строки сообщает MongoDB, что указанная вами временная метка указана в формате UTC. Если вы затем прочитаете его, ваше приложение, вероятно, преобразует его в вашместный часовой пояс, создавая впечатление, что время изменилось. Но время все равно, оно интерпретируется только с другой точки зрения. Например12:50:42Z а также13:50:42+01:00 представляют один и тот же момент времени.

Ваш ответ на вопрос