PEMBARUAN: (5 tahun kemudian)
Catatan: Jika Anda memutuskan untuk menggunakan Arsitektur Kappa ( Pengadaan Acara + CQRS ), maka Anda tidak perlu tanggal yang diperbarui sama sekali. Karena data Anda adalah log peristiwa yang tidak berubah dan hanya-tambahkan, Anda hanya perlu tanggal yang dibuat acara. Mirip dengan Arsitektur Lambda , dijelaskan di bawah ini. Maka status aplikasi Anda adalah proyeksi log peristiwa (data yang diturunkan). Jika Anda menerima acara berikutnya tentang entitas yang ada, maka Anda akan menggunakan tanggal yang dibuat acara itu sebagai tanggal yang diperbarui untuk entitas Anda. Ini adalah praktik yang biasa digunakan (dan biasanya disalahpahami) dalam sistem layanan mikro.
PEMBARUAN: (4 tahun kemudian)
Jika Anda menggunakan bidang ObjectId
Anda _id
(yang biasanya merupakan kasus), maka yang perlu Anda lakukan adalah:
let document = {
updatedAt: new Date(),
}
Lihat jawaban asli saya di bawah ini tentang cara mendapatkan cap waktu yang dibuat dari _id
bidang. Jika Anda perlu menggunakan ID dari sistem eksternal, maka periksa jawaban Roman Rhrn Nesterov.
UPDATE: (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 mengatur cap waktu, luak menetapkan createdAt
dan updatedAt
bidang ke skema Anda, tipe yang ditugaskan adalah Date
.
Anda juga dapat menentukan nama timestamp yang diajukan:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Catatan: Jika Anda bekerja pada aplikasi besar dengan data penting, Anda harus mempertimbangkan kembali memperbarui dokumen Anda. Saya akan menyarankan Anda untuk bekerja dengan data yang tidak dapat diubah, append-only ( 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 setel deleted
bidang ke true
. Demikian pula jika Anda ingin memperbarui dokumen - Anda membuat yang baru dengan bidang yang sesuai diperbarui dan sisa bidang disalin. Kemudian untuk meminta dokumen ini Anda akan mendapatkan yang dengan cap waktu terbaru atau versi tertinggi yang bukan "dihapus" (thedeleted
bidang tidak terdefinisi atau salah`).
Ketidakberesan data memastikan bahwa data Anda dapat dibantah - Anda dapat melacak sejarah setiap dokumen. Anda juga dapat mengembalikan ke versi dokumen sebelumnya jika terjadi kesalahan. Jika Anda pergi dengan arsitektur seperti ObjectId.getTimestamp()
itu yang Anda butuhkan, dan itu tidak bergantung pada luwak.
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
arsip, Anda harus 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();
});