Я вставляю документ по следующему запросу:
db.collection.insert(
{
date: Date('Dec 12, 2014 14:12:00')
})
Но это даст мне ошибку. Мне нужно вставить дату в мою коллекцию, как я могу ее исправить.
Я вставляю документ по следующему запросу:
db.collection.insert(
{
date: Date('Dec 12, 2014 14:12:00')
})
Но это даст мне ошибку. Мне нужно вставить дату в мою коллекцию, как я могу ее исправить.
Вы должны получить другую ошибку, поскольку приведенный выше код приведет к тому, что метод Date()
вернет текущую дату в виде строки, независимо от аргументов, предоставленных с объектом. Из документации : Объекты JavaScript Date могут быть созданы только путем вызова JavaScript Date
в качестве конструктора: вызов его как регулярной функции (т.е. без new
) возвращает строку, а не объект Date
; в отличие от других типов объектов JavaScript, объекты JavaScript Date не имеют литерального синтаксиса.
Возможно, вы захотите попробовать это, чтобы получить правильную дату, имея в виду, что параметр месяца конструктора JavaScript Date основан на 0:
var myDate = new Date(2014, 11, 12, 14, 12);
db.collection.insert({ "date": myDate });
Объекты дат JavaScript могут быть забавной. В зависимости от того, как вы фактически поставляете аргументы для их создания, вы получаете разные результаты.
Например, некоторые могут предложить вам попробовать следующее:
var myDate = new Date(2014, 11, 12, 14, 12)
Что кажется прекрасным, но есть проблема.
Вы видите, что некоторые формы создания объекта Date
в JavaScript используют "локальный" часовой пояс при создании даты. Другие используют UTC или "универсальный" часовой пояс к установленному стандарту. Это также "стандарт", который ожидает MongoDB, и обычно считается наилучшей практикой для вашего приложения хранить даты таким образом. Сделайте какие-либо преобразования в вашем коде, вдали от хранилища данных. Это гарантирует, что вы можете иметь дело с несколькими локалями без проблем.
Итак, что вы должны делать, это следующее:
var date = new Date("2014-12-11T14:12:00Z")
В оболочке MongoDB также есть "помощник", который обрабатывает это почти так же, но более специфичен для синтаксиса:
var date = new ISODate("2014-12-11T14:12:00Z")
Это дает значение даты UTC, которое хранится правильно, как ожидалось. Вы всегда должны иметь дело с UTC при хранении дат в MongoDB.