Witam Muszę dziedziczyć moje schematy w bibliotece mangusty. Czy są na to pełne wtyczki? Albo jak mam to zrobić?Dziedziczenie w mangurze
Muszę odziedziczyć również oprogramowanie pośrednie pre, post, init ze schematu podstawowego.
Witam Muszę dziedziczyć moje schematy w bibliotece mangusty. Czy są na to pełne wtyczki? Albo jak mam to zrobić?Dziedziczenie w mangurze
Muszę odziedziczyć również oprogramowanie pośrednie pre, post, init ze schematu podstawowego.
Możesz zajrzeć do korzystania z Mongoose Plugin:
Wtyczka, że robi to, co chcesz 'out of the box' jest tutaj:
Dla innych szukających tej funkcjonalności, Mongoose 3.8 ma teraz schematu dziedziczenia poprzez funkcje dyskryminacyjne:
W tej chwili wbudowane dyskryminatory Mongoose zezwalają tylko na jeden "poziom" dziedziczenia. Jest problem, aby rozwiązać ten problem tutaj: https://github.com/Automattic/mongoose/issues/2851. – c1moore
sprawdzić modeli ram Mongoose:
https://github.com/marian2js/rode#models-with-mongoose
ten jest przykładem kogo rozszerzać shemas z tą strukturą:
Przede wszystkim określ swój schemat w nowym "modelu rode":
var rode = require('rode');
var User = rode.Model.extend({
name: 'User',
schema: {
name: {
type: 'String',
unique: true
},
email: String,
password: String
}
});
Teraz należy zadzwonić przedłużyć metoda:
var Admin = User.extend({
name: 'Admin',
// The schema for admins is the schema for users + their own schema
schema: {
lastAccess: Date
}
});
Ale mają w mięty tę notatkę wyodrębnione z github ramowej: „Oba modele będą dzielić tę samą kolekcję na MongoDB. Dokumenty rozszerzonych modeli będą miały atrybut _type do rozróżnienia. "
Wiem, że to staruszek, ale przyjechałem tutaj, szukając odpowiedzi na to samo pytanie i skończyłem robiąc coś trochę innego. aby móc korzystać z dyskryminatory ponieważ wszystkie dokumenty są przechowywane w tej samej kolekcji.
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');
Wszystkie 4 pola będą w NewModelItem. Użyj ModelBase dla innych modeli, w których chcesz używać tych samych pól/opcji/etc. W moim projekcie umieściłem tam znaczniki czasu.
Schema.add jest wywoływana w konstruktorze schematu, więc model powinien zostać złożony tak, jakby wszystkie pola zostały wysłane w pierwotnym wywołaniu konstruktora.
Próbowałem tego, ale otrzymałem błąd – Sajeetharan
Jeśli chcesz użyć różne zbiory:
function extendSchema (Schema, definition, options) {
return new mongoose.Schema(
Object.assign({}, Schema.obj, definition),
options
);
}
Zastosowanie:
const UserSchema = new mongoose.Schema({
firstname: {type: String},
lastname: {type: String}
});
const ClientSchema = extendSchema(UserSchema, {
phone: {type: String, required: true}
});
Dzięki za przykład z oficjalnej strony. Ale chcę zobaczyć kompletne rozwiązanie. Myślę, że nie jestem sam w tym problemie. – Erik
Sprawdź drugi link. – hunterloftis
Dzięki za link. To jest to, czego potrzebuję. – Erik