MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

tambahkan bidang create_at dan updated_at ke skema luwak

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 atur deleted bidang ke true . 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();
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $hariTahun

  2. Mengapa hasOwnProperty model luwak mengembalikan false ketika properti memang ada?

  3. Kelas 'MongoDB\Driver\Manager' tidak ditemukan

  4. Cara terbaik untuk memodelkan sistem pemungutan suara di MongoDB

  5. MongoDB:keluaran 'id' bukan '_id'