2011-10-31 66 views
7

He estado usando node-mongoskin para conectar estos dos. Todo estuvo bien hasta que consulté un campo de "fecha" que creo que debería devolverse como el objeto Date de javascript. Pero el tipo de resultado fue cadena, lo cual es extraño (para mí) e inconveniente.MongoDB + Node.js: no se puede insertar la fecha correctamente

Inserción ve algo como esto:

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

Y consecuencia de arriba es (sin _id campo):

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

Sin embargo, la inserción con MongoDB Shell funciona bien, excepto el tipo de campo es ISODate

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

Entonces, la pregunta es: ¿cómo sh ¿Debería insertar documentos para consultar los campos de fecha como objeto Date? Lo que quiero es establecer campos en el servidor de la base de datos. Simplemente envío algo como null-fields, y db-server configurándome los mecanismos de mongo predeterminados.

Insertar marcas de tiempo (como native MongoDB timestamp) también es un problema, pero no es un gran problema.

PD: No hubo suerte en mongoskin y mongodb-native docs.

+0

Creo que el problema de fecha se ha ido con la actualización (no estoy seguro de quién: el controlador de mongo). Aún me pregunto cómo deberían insertarse las marcas de tiempo correctamente. – elmigranto

Respuesta

0

ISODate es la forma nativa para que mongo almacene la fecha. Utilizo node-mongodb-native npm module y almaceno/recupero javascript Date usando una nueva expresión de Date() como en sus ejemplos. No sé si es una corrección reciente porque comencé Nodo y Mongo en 2012, pero el uso de la fecha fue bastante sencillo para mí.

0

código 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 }, 

produce en 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

Gracias. Pero como noté en el comentario de la pregunta, la inserción de fechas está bien. Pero cómo se insertan las marcas de tiempo (en [formato mongodb] (http://www.mongodb.org/display/DOCS/Timestamp+data+type)). Supongo que podría hacerse con 'collection.insert ({ts: new mongoskin.Timestamp()})'. – elmigranto

Cuestiones relacionadas