Héritage dans la mangouste

Bonjour, j'ai besoin d'hériter de mes schémas dans la bibliothèque de mangouste. Y a-t-il des plugins complets pour cela? Ou comment faire moi-même?

Je dois hériter de tous les pré, post, init middleware à partir d'un schéma de base également.

Vous voudrez peut-être regarder un plugin Mongoose:

Un plugin qui fait ce que vous voulez "hors de la boîte" est ici:

Pour d'autres qui recherchent cette fonctionnalité, Mongoose 3.8 dispose désormais d'une fonctionnalité Schema Inheritance via Discriminator:

https://github.com/LearnBoost/mongoose/pull/1647

Je sais que c'est une vieille, mais je suis arrivé ici à la recherche de la réponse à la même question et j'ai fini par faire quelque chose de différent. Je ne veux pas utiliser de discriminateurs parce que tous les documents sont stockés dans la même collection.

ModelBase.js

 var db = require('mongoose'); module.exports = function(paths) { var schema = new db.Schema({ field1: { type: String, required: false, index: false }, field2: { type: String, required: false, index: false } }, { timestamps: { createdAt: 'CreatedOn', updatedAt: 'ModifiedOn' } }); schema.add(paths); return schema; }; 

NewModel.js

 var db = require('mongoose'); var base = require('./ModelBase'); var schema = new base({ field3: { type: String, required: false, index: false }, field4: { type: String, required: false, index: false } }); db.model('NewModelItem', schema, 'NewModelItems'); 

Tous les 4 champs seront dans NewModelItem. Utilisez ModelBase pour d'autres modèles où vous souhaitez utiliser les mêmes champs / options / etc. Dans mon projet, j'ai mis les timestamps ici.

Schema.add est appelé dans le constructeur Schema afin que le modèle soit assemblé comme si tous les champs avaient été envoyés dans l'appel constructeur d'origine.

Vérifiez les modèles de ce cadre pour Mongoose:

https://github.com/marian2js/rode#models-with-mongoose

C'est un exemple de savoir pour étendre le shemas à ce cadre:

Tout d'abord, définissez votre schéma dans un nouveau modèle "monté":

 var rode = require('rode'); var User = rode.Model.extend({ name: 'User', schema: { name: { type: 'String', unique: true }, email: String, password: String } }); 

Maintenant, vous devez appeler la méthode d'extension:

 var Admin = User.extend({ name: 'Admin', // The schema for admins is the schema for users + their own schema schema: { lastAccess: Date } }); 

Mais ont en note cette note extraite du framework github: "Les deux modèles partageront la même collection sur MongoDB. Les documents des modèles étendus auront un type d'attribut de différenciation".

Si vous souhaitez utiliser différentes collections :

 function extendSchema (Schema, definition, options) { return new mongoose.Schema( Object.assign({}, Schema.obj, definition), options ); } 

Usage:

 const UserSchema = new mongoose.Schema({ firstname: {type: String}, lastname: {type: String} }); const ClientSchema = extendSchema(UserSchema, { phone: {type: String, required: true} }); 

https://www.npmjs.com/package/mongoose-extend-schema