MongoDB + Node.js: невозможно правильно вставить дату - PullRequest
8 голосов
/ 31 октября 2011

Я использовал node-mongoskin , чтобы соединить эти два. Все было в порядке, пока я не запросил какое-то поле «дата», которое, я думаю, должно быть возвращено как Date объект javascript. Но тип результата был string, что странно (для меня) и неудобно.

Вставка выглядит примерно так:

var doc = {
  date: new Date(),
  info: 'Some info'
}
db.users.insert( doc, {safe: true}, function(err, res) {
  ...
});

И результат выше (без поля _id):

{ "date" : "Mon Oct 24 2011 18:00:57 GMT+0400 (MSK)", "info": "Some info" }

Однако вставка с MongoDB Shell работает просто отлично, за исключением того, что тип поля равен ISODate

> db.things.insert({ date: new Date() }); db.things.find();
{ "_id" : ObjectId("4eae9f2a34067b92db8deb40"), "date" : ISODate("2011-10-31T13:14:18.947Z") }

Итак, вопрос таков: как мне вставить документы в поля даты как объект Date? То, что я хочу, это установка полей на стороне базы данных сервера. Я просто отправляю что-то вроде нулевых полей, и db-сервер устанавливает их для меня, используя механизмы Монго по умолчанию.

Вставка временных меток (например, встроенная временная метка MongoDB ) также является проблемой, но это не такая большая проблема.

PS: Не повезло, проходя монгоскин и родной mongodb документы.

Ответы [ 3 ]

13 голосов
/ 23 августа 2012

Вероятно, это была какая-то ошибка в моем коде или драйвере монго. Теперь все работает нормально:

db.collection.insert({d: new Date()});

Поддержка меток времени описана здесь: http://mongodb.github.com/node-mongodb-native/api-bson-generated/timestamp.html.

0 голосов
/ 07 мая 2012

Код JavaScript:

    collection.insert({"className"     : "models.Action", 
                       "title"         : "Email",
                       "description"   : "How are you today?",
                       "creationDate"  :  new Date("Fry, 4 May 2012 10:30:08 +0200 (CEST)"),
                       "creator"       : dbref },

производится в mongoDB

db.action.find({"title":"Email"})
> db.action.find({"title":"Email"})
{ "className" : "models.Action", "title" : "Email", "description" : "How are you today?", "creationDate" : ISODate("2012-05-04T08:30:08Z"), "creator" : { "$ref" : "person", "$id" : ObjectId("4f995e4824ac8d68f63adf69") }, "_id" : ObjectId("4fa79e2e92c2a19a09000002") }
0 голосов
/ 05 мая 2012

ISODate - родной способ для монго хранить дату.Я использую node-mongodb-native модуль npm и сохраняю / извлекаю javascript Date, используя новую идиому Date (), как в ваших примерах.Я не знаю, является ли это недавней поправкой, потому что я запустил node и Mongo в 2012 году, но использование даты было довольно простым для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...