MISE À JOUR: (5 ans plus tard)
Remarque: Si vous décidez d'utiliser Kappa Architecture ( Event Sourcing + CQRS ), vous n'avez pas du tout besoin de mettre à jour la date. Étant donné que vos données sont un journal des événements immuable et ajouté uniquement, vous n'avez besoin que de la date de création de l'événement. Similaire à l' architecture Lambda , décrite ci-dessous. L'état de votre application est alors une projection du journal des événements (données dérivées). Si vous recevez un événement ultérieur concernant une entité existante, vous utiliserez la date de création de cet événement comme date de mise à jour pour votre entité. Il s'agit d'une pratique couramment utilisée (et souvent mal comprise) dans les systèmes de micro-services.
MISE À JOUR: (4 ans plus tard)
Si vous utilisez ObjectId
comme _id
champ (ce qui est généralement le cas), tout ce que vous avez à faire est de:
let document = {
updatedAt: new Date(),
}
Vérifiez ma réponse originale ci-dessous pour savoir comment obtenir l'horodatage créé à partir du _id
champ. Si vous devez utiliser des identifiants provenant d'un système externe, vérifiez la réponse de Roman Rhrn Nesterov.
MISE À JOUR: (2,5 ans plus tard)
Vous pouvez maintenant utiliser l' option #timestamps avec la version mangouste> = 4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Si vous définissez des horodatages, des assignations de mangouste createdAt
et des updatedAt
champs à votre schéma, le type attribué est Date
.
Vous pouvez également spécifier les noms des fichiers d'horodatage:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Remarque: si vous travaillez sur une grande application avec des données critiques, vous devez reconsidérer la mise à jour de vos documents. Je vous conseillerais de travailler avec des données immuables, ajoutées uniquement ( architecture lambda ). Cela signifie que vous n'autorisez que les insertions. Les mises à jour et les suppressions ne devraient pas être autorisées! Si vous souhaitez "supprimer" un enregistrement, vous pouvez facilement insérer une nouvelle version du document avec certains timestamp
/ version
classés, puis définir un deleted
champ sur true
. De même, si vous souhaitez mettre à jour un document - vous en créez un nouveau avec les champs appropriés mis à jour et le reste des champs copié.Ensuite, pour interroger ce document, vous obtiendrez celui avec l'horodatage le plus récent ou la version la plus élevée qui est pas "supprimé" (ledeleted
champ est indéfini ou faux`).
L'immuabilité des données garantit que vos données sont déboguables - vous pouvez retracer l'historique de chaque document. Vous pouvez également revenir à la version précédente d'un document en cas de problème. Si vous optez pour une telle architecture, ObjectId.getTimestamp()
c'est tout ce dont vous avez besoin, et elle n'est pas dépendante de Mongoose.
RÉPONSE ORIGINALE:
Si vous utilisez ObjectId comme champ d'identité, vous n'avez pas besoin de created_at
champ. Les ObjectIds ont une méthode appelée getTimestamp()
.
ObjectId ("507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
Cela renverra la sortie suivante:
ISODate ("2012-10-15T21: 26: 17Z")
Plus d'informations ici Comment extraire la date de création d'un objet Mongo ObjectID
Pour ajouter un updated_at
fichier, vous devez utiliser ceci:
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();
});