GÜNCELLEME: (5 yıl sonra)
Not: Kappa Mimarisini ( Olay Kaynağı + CQRS ) kullanmaya karar verirseniz , güncellenmiş tarihe ihtiyacınız yoktur. Verileriniz değiştirilemez, salt eklenmiş bir olay günlüğü olduğundan, yalnızca olayın oluşturulma tarihine ihtiyacınız vardır. Aşağıda açıklanan Lambda Mimarisine benzer . O zaman uygulama durumunuz olay günlüğünün (türetilmiş veriler) bir projeksiyonudur. Mevcut varlık hakkında daha sonra bir etkinlik alırsanız, o etkinliğin oluşturulma tarihini kuruluşunuz için güncellenmiş tarih olarak kullanırsınız. Bu, fare hizmet sistemlerinde yaygın olarak kullanılan (ve genellikle yanlış anlaşılan) bir uygulamadır.
GÜNCELLEME: (4 yıl sonra)
ObjectId
Alanınız olarak kullanırsanız _id
(genellikle durum budur), yapmanız gereken tek şey:
let document = {
updatedAt: new Date(),
}
Oluşturulan zaman damgasını _id
alandan nasıl alacağımla ilgili aşağıdaki orijinal yanıtımı kontrol edin . Harici sistemden kimlik kullanmanız gerekiyorsa, Roman Rhrn Nesterov'un cevabını kontrol edin.
GÜNCELLEME: (2.5 yıl sonra)
Artık #timestamps seçeneğini mongoose sürüm> = 4.0 ile kullanabilirsiniz.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Zaman damgaları ayarlanırsa, mongoose şemanıza alanlar createdAt
ve updatedAt
alanlar atar , atanan türdür Date
.
Ayrıca zaman damgası dosyalarının adlarını da belirtebilirsiniz:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Not: Kritik verileri olan büyük bir uygulama üzerinde çalışıyorsanız, belgelerinizi güncellemeyi tekrar düşünmelisiniz. Değişmez, sadece ekli verilerle ( lambda mimarisi ) çalışmanızı tavsiye ederim . Bunun anlamı, yalnızca kesici uçlara izin vermenizdir. Güncelleme ve silme işlemlerine izin verilmemelidir! Bir kaydı "silmek" istiyorsanız, belgenin bir kısmını timestamp
/ version
dosyalanmış olan yeni bir sürümünü kolayca ekleyebilir ve daha sonra bir deleted
alan ayarlayabilirsiniz true
. Benzer şekilde, bir belgeyi güncellemek istiyorsanız - uygun alanların güncellendiği ve geri kalan alanların kopyalandığı yeni bir belge oluşturursunuz.Ardından bu belgeyi sorgulamak için en yeni zaman damgasına veya "silinmedi" (deleted
alan tanımsız veya yanlış`).
Veri değişmezliği, verilerinizin hata ayıklanabilmesini sağlar - her belgenin geçmişini izleyebilirsiniz. Bir şeyler ters giderse belgenin önceki sürümüne de geri dönebilirsiniz. Eğer böyle bir mimariye sahip ObjectId.getTimestamp()
olursanız, ihtiyacınız olan tek şey budur ve Mongoose'a bağımlı değildir.
ORİJİNAL CEVAP:
Kimlik alanınız olarak ObjectId kullanıyorsanız alana ihtiyacınız yoktur created_at
. ObjectIds adlı bir yöntem var getTimestamp()
.
Nesne Kimliği ( "507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
Bu, aşağıdaki çıktıyı döndürür:
ISODate ( "2012-10-15T21: 26: 17Z")
Burada daha fazla bilgi Oluşturulan tarihi bir Mongo ObjectID'den nasıl ayıklayabilirim
updated_at
Dosya eklemek için şunu kullanmanız gerekir:
var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});