UPDATE : (5 ans plus tard)
Nota: Si vous décidez d'utiliser Kappa Architecture ( Recherche d'événements + CQRS ), il n'est pas nécessaire de mettre à jour la date. Puisque vos données sont un journal d'événements immuables, à ajouter uniquement, vous n'avez besoin que de la date de création de l'événement. De la même manière que le 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 de votre entité. Il s'agit d'une pratique courante (et souvent mal comprise) dans les systèmes de micro-services.
UPDATE : (4 ans plus tard)
Si vous utilisez ObjectId
comme votre _id
(ce qui est généralement le cas), il vous suffit alors de faire ce qui suit :
let document = {
updatedAt: new Date(),
}
Consultez ma réponse originale ci-dessous sur la façon d'obtenir l'horodatage de la création à partir de la base de données de l'entreprise. _id
champ. Si vous devez utiliser des identifiants provenant d'un système externe, consultez la réponse de Roman Rhrn Nesterov.
UPDATE : (2,5 ans plus tard)
Vous pouvez maintenant utiliser le #timestamps avec mongoose version >= 4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Si des timestamps sont définis, la mangouste attribue des createdAt
y updatedAt
à 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' }
Nota: Si vous travaillez sur une grosse application avec des données critiques, vous devriez reconsidérer la mise à jour de vos documents. Je vous conseillerais de travailler avec des données immuables, en append-only ( architecture lambda ). Ce que cela signifie, c'est que que vous n'autorisez que les insertions. Les mises à jour et les suppressions ne doivent pas être autorisés ! Si vous souhaitez "supprimer" un document, vous pouvez facilement insérer une nouvelle version du document avec quelques timestamp
/ version
déposé et ensuite fixer un deleted
pour true
. De même, si vous voulez Si vous voulez mettre à jour un document, créez-en un nouveau en mettant à jour les champs appropriés et en copiant les autres. appropriés et le reste des champs est copié. demander ce document, vous obtiendrez celui avec l'horodatage le plus récent ou la version la plus récente qui n'est pas "supprimée" (l'option deleted
le champ est indéfini ou faux`).
L'immutabilité 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 précédente d'un document si quelque chose ne va pas. Si vous optez pour un tel système architecture ObjectId.getTimestamp()
est tout ce dont vous avez besoin, et ce n'est pas dépendant de Mongoose.
RÉPONSE ORIGINALE :
Si vous utilisez ObjectId comme champ d'identité, vous n'avez pas besoin de created_at
champ. Les ObjectIds possèdent une méthode appelée getTimestamp()
.
ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
Le résultat sera le suivant :
ISODate("2012-10-15T21:26:17Z")
Plus d'informations ici Comment extraire la date de création d'un ObjectID Mongo ?
Afin d'ajouter updated_at
déposé 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();
});