2013-04-05 10 views
10

Web sunucum için Mongoose & Node.js kullanıyorum. Benim belge şemalar birinin bir parçası olarak Yüklendiğinde Unix döneminden beri bir saklanan depo tarihini milisaniye dönüştürmek mi?

, ben 'damgası' alanı var. şemada bunun için çizgidir: timestamp: { type: Date, default: Date.now }

Bu iyi çalışır ve bana damgası dayanan belgeleri almak için izin verir, ancak bu ISODate biçimi olarak kaydeder burada açıklandığı şekilde: http://docs.mongodb.org/manual/core/document/#date böyle:

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

Bunu umursamıyorum, ancak bunu müşteriye olduğu gibi gönderdim. Bu, onunla karşılaştırmalı işlemler yapabilmem için önce istemcideki Date.parse() öğesini kullanmam gerektiği anlamına gelir.

bir tamsayı olarak tarih depolayabilir veya otomatik olarak alınan ne zaman birine dönüştürmek için ya bir yolu var mı?

Ne kadar tutmak ve sadece istemci sonunda onunla başa için bir neden var mı?

Şimdiden teşekkürler.

cevap

15

Sen şema üzerinde virtual özellik olarak timestamp sayısal milisaniye sürümü ekleyebilir: En şemada bir seçenek aracılığıyla

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

Sonra modeli örneklerinde toObject çağrılarında sanal alanın dahil edilmesini etkinleştirebilirsiniz:

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

Handy !! Teşekkürler! :) –

+1

'{toObject: {virtuals: true}, toJSON: {virtuals: true}}' benim için çalışıyor – Ming

+0

Ohh adamım, bu güzel! teşekkür ederim! – Jose

2

En iyi uygulama olarak şunu söyleyebilirim: Verilerinizi hakettiği türden. Müşteriniz numaraları ile tedavi gerekiyorsa

Neyse, sadece müşteriye milisaniye olarak tarih geçebilir ve hala Düğüm Tarih nesnelerle çalışır. Sadece timestamp.getTime() ve ta-da çağrı

, istemci için unix zaman hazır.

3

Bu benim

db.eurusd.ticks.findOne({_id:ObjectId("518636777055000000000000")}).t.getTime() 
için çalışıyor 10

döndü belge yapısını

{ 
"_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()} 
}); 

Bu sorununuzu çözecektir Umut sahiptir miliseconds zaman döndürür.

İlgili konular