2017-07-05 3 views
2

J'utilise MongoDB et mongoose pour un projet qui a besoin de suivre la création de données et les changements. Les exigences sont que j'ai besoin de garder une trace de la création des enregistrements et des changements, y compris la date/heure et l'utilisateur de l'application (pas l'utilisateur du système d'exploitation) qui l'a fait.Mongoose Schema étendre timestamp pour avoir de nouvelles propriétés (nom d'utilisateur)

J'ai vu l'option mongoose timestamps qui résoudrait mon problème date/heure, mais est-il possible de l'étendre pour inclure des propriétés supplémentaires, où je vais ajouter le nom d'utilisateur de l'application? Sinon, y a-t-il un seul endroit où je peux écrire une fonction qui sera appelée sur chaque création/mise à jour pour que je puisse inclure/modifier ces champs?

Aujourd'hui j'insère ces propriétés sur tous les modèles comme ci-dessous, mais j'aimerais les déplacer tous à un seul endroit.

var companySchema = mongoose.Schema({ 

    name: { 
     type: String, 
     index: true 
    }, 
    phone: { 
     type: String 
    }, 
    deleted: { 
     type: Boolean 
    }, 
    createdAt: { 
     type: Date 
    }, 
    createdBy: { 
     type: String 
    }, 
    updatedAt: { 
     type: Date 
    }, 
    updatedBy: { 
     type: String 
    } 
}); 

Comment serait la meilleure approche pour cela?

Répondre

0

Je voudrais l'aborder en créant deux modèles, un pour chaque données créées, un pour chaque modifications de données.

Les données créées qui ont 6 champs l'un est CreatedBy, createdAt, et on sera un champ avec un tableau de référence id des changements de données, deletedBy, deletedAt, deletedFlag .

données changements auront des champs Dataid qui auront référence id de données créées, updatedBy et updatedAt.

De cette façon, il sera facile de garder une trace de quand il a été créé quand il a été modifié et quand il a été supprimé. PS: Vous pouvez supprimer l'un des éléments Array dans le modèle Data Data ou DataID Ref en mode Data Change, mais il est juste que je fasse preuve de prudence lors de la liaison.