MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

dodaj pola created_at i updated_at do schematów mangusty

AKTUALIZACJA: (5 lat później)

Uwaga: Jeśli zdecydujesz się użyć Kappa Architecture (Pozyskiwanie zdarzeń + CQRS ), wtedy w ogóle nie potrzebujesz zaktualizowanej daty. Ponieważ Twoje dane są niezmiennym dziennikiem zdarzeń tylko do dołączania, potrzebujesz tylko daty utworzenia zdarzenia. Podobny do Architektury Lambda , Opisane poniżej. Wtedy stan aplikacji jest projekcją dziennika zdarzeń (dane pochodne). Jeśli otrzymasz kolejne zdarzenie dotyczące istniejącego podmiotu, użyjesz daty utworzenia tego zdarzenia jako zaktualizowanej daty dla swojego podmiotu. Jest to powszechnie stosowana (i często błędnie rozumiana) praktyka w systemach micelarnych.

AKTUALIZACJA: (4 lata później)

Jeśli używasz ObjectId jako Twój _id (co zwykle ma miejsce), wystarczy:

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

Sprawdź moją oryginalną odpowiedź poniżej, jak uzyskać utworzony znacznik czasu z _id field.Jeśli potrzebujesz identyfikatorów z systemu zewnętrznego, sprawdź odpowiedź Romana Rhrna Nesterova.

AKTUALIZACJA: (2,5 roku później)

Możesz teraz użyć opcji #timestamps w wersji z mangustą>=4.0.

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

Jeśli ustawione są znaczniki czasu, mangusta przypisuje createdAt i updatedAt pola do schematu, przypisany typ to Date .

Możesz także określić nazwy plików sygnatur czasowych:

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

Uwaga: Jeśli pracujesz nad dużą aplikacją z krytycznymi danymi, powinieneś ponownie rozważyć aktualizację swoich dokumentów. Radziłbym pracować z niezmiennymi danymi, które mogą być tylko dołączane (architektura lambda). Oznacza to, że zawsze zezwalasz tylko na wstawki. Aktualizacje i usuwanie nie powinny być dozwolone! Jeśli chcesz "usunąć" rekord, możesz łatwo wstawić nową wersję dokumentu z jakimś timestamp /version złożony, a następnie ustaw deleted pole na true . Podobnie, jeśli chcesz zaktualizować dokument – ​​tworzysz nowy z odpowiednimi zaktualizowanymi polami i skopiowaniem pozostałych pól. Następnie, aby przeszukać ten dokument, otrzymasz ten z najnowszym znacznikiem czasu lub najwyższą wersją, która nie jest „usunięta” (deleted pole jest niezdefiniowane lub fałszywe`).

Niezmienność danych zapewnia możliwość debugowania danych – możesz prześledzić historię każdego dokumentu. Możesz także przywrócić poprzednią wersję dokumentu, jeśli coś pójdzie nie tak. Jeśli pójdziesz z taką anarchitekturą ObjectId.getTimestamp() to wszystko, czego potrzebujesz i nie jest zależne od Mongoose.

PIERWOTNA ODPOWIEDŹ:

Jeśli używasz ObjectId jako pola tożsamości, nie potrzebujesz created_at pole. ObjectIds mają metodę o nazwie getTimestamp() .

ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()

Spowoduje to zwrócenie następujących danych wyjściowych:

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

Więcej informacji tutaj Jak wyodrębnić datę utworzenia z identyfikatora obiektu Mongo

Aby dodać updated_at złożony, musisz użyć tego:

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. Sprawdź uwierzytelnianie MongoDB za pomocą sterownika Java 3.0

  2. Jak załadować 100 milionów rekordów do MongoDB za pomocą Scali w celu przetestowania wydajności?

  3. Kiedy używać CouchDB przez MongoDB i na odwrót?

  4. MongoDB $podłoga

  5. replika Ustaw mongo docker-compose