2015-01-27 24 views
9

Mam aplikację, która działa na node.js z mongodb i mangusta. Moja aplikacja po prostu wysyła/usuwa/edytuje dane formularzy i za to mam taki model Mongoose:Jak dynamicznie tworzyć schemat mangusty?

var mongoose = require('mongoose'); 

module.exports = mongoose.model('appForm', { 
    User_id : {type: String}, 
    LogTime : {type: String}, 
    feeds : [ 
    { 
     Name: {type: String}, 
     Text : {type: String}, 
    } 
    ] 
}); 

i że działa dobrze!

Teraz chciałbym dodać funkcję do formularza, aby użytkownik mógł dodać pole (lub pola), aby utworzyć i wprowadzić tekst w nim i opublikować go. Tworzenie tej dynamicznej funkcjonalności po stronie klienta nie stanowi problemu, ale rozumiem, że mój plik mongoose.model musi być poprawnie skonstruowany. Moje pytanie brzmi: jak dodać wartości zmiennych (dynamicznie tworzona nazwa danych formularza i jego tekst) do schematu mangusty?

widzę, że za pomocą 'surowe: false' i 'Schema.Types.Mixed' zaleca jednak nie mogę wymyślić .. Co próbowałem:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var feedSchema = new Schema({strict:false}); 

module.exports = mongoose.model('appForm', feedSchema); 

Wszelkie wskazówki? Z góry dziękuję!

Odpowiedz

16

Zastosuj opcję strict: false do istniejącej definicji schematu poprzez dostarczanie go jako drugi parametr do konstruktora Schema:

var appFormSchema = new Schema({ 
    User_id : {type: String}, 
    LogTime : {type: String}, 
    feeds : [new Schema({ 
     Name: {type: String}, 
     Text : {type: String} 
    }, {strict: false}) 
    ] 
}, {strict: false}); 

module.exports = mongoose.model('appForm', appFormSchema); 

Jeśli chcesz zostawić feeds jako całkowicie schemaless, to gdzie można stosować Mixed:

+0

Ten kod działa i publikuje domyślne dane formularza: user_id, LogTime i posortuje tablicę i jej obiekt, ale gdy dodaję inną właściwość do tablicy kanałów, takich jak: customText, to nie aktualizuje tego custo mText, ale reszta ... Przeszukuję, gdzie wciąż robię coś nie tak ... dzięki! – Mar

+0

Jeśli chcesz dodać dowolne właściwości do 'feeds ', to opcja musi być również ustawiona na tym schemacie osadzonym. Zobacz zaktualizowaną odpowiedź. – JohnnyHK

+1

TAK !!! :) druga opcja to dokładnie to, co próbuję zrobić godzinami! Wielkie dzięki! – Mar

Powiązane problemy