2013-04-05 14 views
10

Sto usando Mongoose & Node.js per il mio server web.La conversione di un mongo è stata ripristinata in millisecondi dall'epoca di Unix una volta caricata?

Come parte di uno dei miei schemi di documento, ho un campo "timestamp". La linea per esso nello schema è: timestamp: { type: Date, default: Date.now }

Questo funziona bene, e mi permette di recuperare i documenti in base alla data e ora, tuttavia, questo salva come formato isodate come descritto qui: http://docs.mongodb.org/manual/core/document/#date, in questo modo:

"timestamp":"2013-04-04T19:31:38.514Z"

Non mi dispiace, ma lo invio al cliente così com'è. Ciò significa che devo utilizzare Date.parse() sul lato client prima di poter eseguire operazioni comparative con esso.

C'è un modo per memorizzare la data come numero intero o convertirla automaticamente in una quando viene recuperata?

C'è qualche ragione per cui dovrei tenerlo com'è, e occuparmene solo al client?

Grazie in anticipo.

risposta

15

È possibile aggiungere la versione numerica millisecondi di timestamp come attributo virtual sullo schema:

schema.virtual('timestamp_ms').get(function() { 
    return this.timestamp.getTime(); 
}); 

Quindi è possibile abilitare l'inserimento del campo virtuale in toObject invita gli esempi di modelli tramite un'opzione sullo schema:

var schema = new Schema({ 
    timestamp: Date 
}, { 
    toObject: { getters: true } 
}); 
+0

Handy !! Grazie! :) –

+1

'{toObject: {virtuals: true}, toJSON: {virtuals: true}}' funziona per me – Ming

+0

Ohh amico, è bellissimo! grazie! – Jose

2

Come best practice, direi: mantieni i tuoi dati il ​​tipo che merita.

In ogni caso, se il client ha bisogno di trattare con i numeri, è sufficiente passare la data come millisecondi al client e continuare a lavorare con gli oggetti Date nel nodo.

Basta chiamare timestamp.getTime() e ta-da, il timestamp unix è pronto per il client.

3

Questo funziona bene per me

db.eurusd.ticks.findOne({_id:ObjectId("518636777055000000000000")}).t.getTime() 

restituisce il tempo in millisecondi, in cui documento restituito ha struttura

{ 
"_id" : ObjectId("518636777055000000000000"), 
"t" : ISODate("2013-05-05T10:37:43Z"), // date data type 
"ask" : "Joe", 
"bid" : 33 
} 
3
var schema = new Schema({ 
    timestamp: {type:Number, default: new Date().getTime()} 
}); 

Spero che questo risolverà il problema.

Problemi correlati