PERBARUI: (5 tahun kemudian)
Catatan: Jika Anda memutuskan untuk menggunakan Arsitektur Kappa (Event Sourcing + CQRS ), maka Anda tidak perlu memperbarui tanggal sama sekali. Karena data Anda adalah log peristiwa yang tidak dapat diubah dan hanya ditambahkan, Anda hanya perlu tanggal pembuatan acara. Mirip dengan Arsitektur Lambda , dijelaskan di bawah ini. Kemudian status aplikasi Anda adalah proyeksi log peristiwa (data turunan). Jika Anda menerima acara berikutnya tentang entitas yang ada, maka Anda akan menggunakan tanggal pembuatan acara tersebut sebagai tanggal pembaruan untuk entitas Anda. Ini adalah praktik yang umum digunakan (dan sering disalahpahami) dalam sistem layanan mikro.
PERBARUI: (4 tahun kemudian)
Jika Anda menggunakan ObjectId
sebagai _id
. Anda (yang biasanya terjadi), maka yang perlu Anda lakukan hanyalah:
let document = {
updatedAt: new Date(),
}
Periksa jawaban asli saya di bawah ini tentang cara mendapatkan cap waktu yang dibuat dari _id
field.Jika Anda perlu menggunakan ID dari sistem eksternal, periksa jawaban Roman Rhrn Nesterov.
PERBARUI: (2,5 tahun kemudian)
Anda sekarang dapat menggunakan opsi #timestamps dengan versi luwak>=4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Jika stempel waktu ditetapkan, luwak menetapkan createdAt
dan updatedAt
bidang skema Anda, jenis yang ditetapkan adalah Date
.
Anda juga dapat menentukan nama file stempel waktu:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Catatan: Jika Anda sedang mengerjakan aplikasi besar dengan data penting, Anda harus mempertimbangkan untuk memperbarui dokumen Anda. Saya akan menyarankan Anda untuk bekerja dengan data yang hanya ditambahkan dan tidak dapat diubah (arsitektur lambda). Artinya, Anda hanya mengizinkan sisipan. Pembaruan dan penghapusan tidak boleh diizinkan! Jika Anda ingin "menghapus" catatan, Anda dapat dengan mudah memasukkan versi baru dokumen dengan beberapa
timestamp
/version
diajukan dan kemudian aturdeleted
bidang ketrue
. Demikian pula jika Anda ingin memperbarui dokumen – Anda membuat yang baru dengan bidang yang sesuai diperbarui dan bidang lainnya disalin. Kemudian untuk menanyakan dokumen ini, Anda akan mendapatkan dokumen dengan stempel waktu terbaru atau versi tertinggi yang tidak "dihapus" (deleted
bidang tidak ditentukan atau salah`).Kekekalan data memastikan bahwa data Anda dapat di-debug – Anda dapat melacak riwayat setiap dokumen. Anda juga dapat mengembalikan ke versi dokumen sebelumnya jika terjadi kesalahan. Jika Anda menggunakan anarsitektur seperti
ObjectId.getTimestamp()
hanya itu yang Anda butuhkan, dan tidak bergantung pada Mongoose.
JAWABAN ASLI:
Jika Anda menggunakan ObjectId sebagai bidang identitas Anda, Anda tidak perlu created_at
bidang. ObjectIds memiliki metode yang disebut getTimestamp()
.
ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
Ini akan mengembalikan output berikut:
ISODate("2012-10-15T21:26:17Z")
Info lebih lanjut di sini Bagaimana cara mengekstrak tanggal yang dibuat dari Mongo ObjectID
Untuk menambahkan updated_at
diajukan, Anda perlu menggunakan ini:
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();
});