2014-09-16 3 views
0

Могу ли я сохранить DateTime как null в MongoDB?MongoDB - Сохранение DateTime как null?

Простите мое невежество, я унаследовал этот проект, и я не очень хорошо знаком с Монго. Когда вы смотрите на MongoVUE, он говорит DateTime и сохраняется как строка ISO, но это type is not included when I look at the Mongo docs.

+1

Это так, как показано на рисунке, внутренняя двоичная дата, такая как C# 'DateTime', хранится как 64-разрядное целое [Дата BSON] (http://docs.mongodb.org/manual/reference/bson-types/ #Дата). – JohnnyHK

ответ

0
  1. Не используйте MongoVUE. Используйте RoboMongo. Это намного лучше, поддерживается, доступно для всех платформ, и последнее, но не менее важное - это бесплатно.
  2. Я думаю, что MongoVUE означает Date.
  3. Поскольку mongoDB не имеет схемы, вы можете сохранять данные любого типа в любом поле.
+0

Вы не можете вставить все. Попробуйте вставить объект, отличный от BSON. Удачи;) На самом деле, вы ограничены [BSON] (http://bsonspec.org/spec.html) –

0

по ISO Дата/время строка имеет вид

YYYY-MM-DDTHH:mm[:ss[.SSS]]TimeZoneOffset|"Z" 

Так, например, время написания (приблизительно) в моем местном времени будет

2014-09-16T18:59+02:00 

Буква T сообщает вы, что дата и время отделены друг от друга. Поэтому при разборе строки ISODate вы можете быть абсолютно уверены, что часть перед «Т» является датой, а часть после Т - временем.

«Z» происходит от алфавита НАТО, обозначающего букву Zulu, которая исторически обозначала стандартное время НАТО, которое само по себе совпадает с UTC с 60-х годов. Таким образом, для коротких обозначений, UTC упоминается в этом письме. Время написания будет написано как

2014-09-16T16:59:00.000Z 

в UTC.

Сохранение дат в MongoDB очень просто. Драйверы базы данных MongoDB обычно отображают собственные типы даты/даты и времени использования языка программирования, которые вы используете в формате, используемом MongoDB внутри save, и наоборот при загрузке данных из базы данных.

Так, например, это вполне допустимо, чтобы сделать что-то вроде

var doc = { name:"FooBar", added: new Date()}; 
db.collection.save({doc}); 

в JavaScript или использовать в Java java.util.Date.

Однако вы обнаружили небольшую несогласованность в документах. В то время как тип упомянутой документации упоминается как Дата, она внутренне хранится как дата BSON. Сама дата BSON хранится как 64-битное целое число с миллисекундами с epoch и преобразуется оболочкой mongo и (iirc как опция некоторыми из драйверов MongoDB) в строку формата даты с ISO.

И да, вы можете сохранить и обработать нулевое значение для каждого заданного поля.

+4

Неверно сказать, что MongoDB хранит дату внутри себя как ISODate. Он хранится внутри как [Дата BSON] (http://docs.mongodb.org/manual/reference/bson-types/#date). ISODate - это просто конструкция JavaScript в Mongo shell. – JohnnyHK

+0

Вы правы. Исправлено это. –