Вставка даты() в Mongodb через оболочку mongo

Я вставляю документ по следующему запросу:

db.collection.insert(  
{  
      date: Date('Dec 12, 2014 14:12:00')  
})  

Но это даст мне ошибку. Мне нужно вставить дату в мою коллекцию, как я могу ее исправить.

Ответ 1

Вы должны получить другую ошибку, поскольку приведенный выше код приведет к тому, что метод 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 });

Ответ 2

Объекты дат 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.