MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

thêm các trường create_at và updated_at vào lược đồ mongoose

CẬP NHẬT: (5 năm sau)

Lưu ý: Nếu bạn quyết định sử dụng Kiến trúc Kappa ( Tìm nguồn cung ứng sự kiện + CQRS ), thì bạn không cần cập nhật ngày nào cả. Vì dữ liệu của bạn là một nhật ký sự kiện không thể thay đổi, chỉ thêm vào, nên bạn chỉ cần ngày tạo sự kiện. Tương tự với Lambda Architecture , được mô tả dưới đây. Sau đó, trạng thái ứng dụng của bạn là một phép chiếu của nhật ký sự kiện (dữ liệu dẫn xuất). Nếu bạn nhận được một sự kiện tiếp theo về thực thể hiện có, thì bạn sẽ sử dụng ngày tạo của sự kiện đó làm ngày cập nhật cho thực thể của mình. Đây là cách thực hành thường được sử dụng (và thường bị hiểu nhầm) trong các hệ thống thiết bị di động.

CẬP NHẬT: (4 năm sau)

Nếu bạn sử dụng ObjectId dưới dạng _id của bạn trường (trường hợp này thường xảy ra), thì tất cả những gì bạn cần làm là:

let document = {
  updatedAt: new Date(),
}

Kiểm tra câu trả lời ban đầu của tôi bên dưới về cách lấy dấu thời gian đã tạo từ _id Nếu bạn cần sử dụng ID từ hệ thống bên ngoài, hãy kiểm tra câu trả lời của Roman Rhrn Nesterov.

CẬP NHẬT: (2,5 năm sau)

Giờ đây, bạn có thể sử dụng tùy chọn #timestamps với phiên bản mongoose> =4.0.

let ItemSchema = new Schema({
  name: { type: String, required: true, trim: true }
},
{
  timestamps: true
});

Nếu đặt dấu thời gian, mongoose sẽ chỉ định createdAtupdatedAt các trường vào lược đồ của bạn, loại được chỉ định là Date .

Bạn cũng có thể chỉ định tên của các tệp tin dấu thời gian:

timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }

Lưu ý: Nếu bạn đang làm việc trên một ứng dụng lớn với dữ liệu quan trọng, bạn nên xem xét lại việc cập nhật tài liệu của mình. Tôi khuyên bạn nên làm việc với dữ liệu bất biến, chỉ thêm vào (kiến trúc lambda). Điều này có nghĩa là bạn chỉ cho phép chèn. Không được phép cập nhật và xóa! Nếu bạn muốn "xóa" một bản ghi, bạn có thể dễ dàng chèn phiên bản mới của tài liệu với một số timestamp / version đệ trình và sau đó đặt một deleted trường thành true . Tương tự nếu bạn muốn cập nhật tài liệu - bạn tạo một tài liệu mới với các trường thích hợp được cập nhật và phần còn lại của các trường được sao chép. Sau đó, để truy vấn tài liệu này, bạn sẽ nhận được tài liệu có dấu thời gian mới nhất hoặc phiên bản cao nhất không bị "xóa" (deleted trường không xác định hoặc sai`).

Tính bất biến của dữ liệu đảm bảo rằng dữ liệu của bạn có thể gỡ lỗi - bạn có thể theo dõi lịch sử của mọi tài liệu. Bạn cũng có thể quay lại bản đảo trước của tài liệu nếu có sự cố. Nếu bạn sử dụng kiến ​​trúc như vậy ObjectId.getTimestamp() là tất cả những gì bạn cần và nó không phụ thuộc vào Mongoose.

CÂU TRẢ LỜI GỐC:

Nếu bạn đang sử dụng ObjectId làm trường danh tính của mình, bạn không cần created_at đồng ruộng. ObjectIds có một phương thức được gọi là getTimestamp() .

ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()

Điều này sẽ trả về kết quả sau:

ISODate("2012-10-15T21:26:17Z")

Thông tin thêm tại đây Làm cách nào để trích xuất ngày đã tạo từ Mongo ObjectID

Để thêm updated_at bạn cần sử dụng cái này:

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. Chèn tệp json vào mongodb

  2. Cách giám sát MongoDB với Prometheus &ClusterControl

  3. MongoDB qua Mongoose JS - findByID là gì?

  4. Cập nhật MongoDBMany ()

  5. Triển khai &định cấu hình các mảnh MongoDB với Ansible