2015-01-27 12 views
9

Ho un'app che funziona su node.js con mongodb e mangusta. La mia app invia semplicemente/elimina/modifiche dei dati del modulo e per questo ho tale modello mangusta:Come creare uno schema di mangusta in modo dinamico?

var mongoose = require('mongoose'); 

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

e che funziona bene!

Ora, vorrei aggiungere una funzione al modulo in modo che l'utente possa aggiungere un campo (o campi) per formare e inserire un testo in esso e pubblicarlo. La creazione di quella funzionalità dinamica sul lato client non è un problema, ma capisco che il mio mongoose.model deve essere strutturato correttamente. La mia domanda è: come aggiungo i valori delle variabili (nome dei dati del modulo creato dinamicamente e il relativo testo) allo schema di mangusta?

vedo che usando 'rigorosa: false' e 'Schema.Types.Mixed' è consigliato però io non riesco a capire .. Quello che ho cercato:

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

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

Qualche consiglio? Grazie in anticipo!

risposta

16

applicare l'opzione strict: false alla definizione dello schema esistente, fornendo come secondo parametro al Schema costruttore:

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); 

Se si desidera lasciare feeds pienamente schemaless, è lì che si può utilizzare Mixed:

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

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

Quel codice funziona e invia i dati di modulo predefiniti: user_id, LogTime e feed array e il suo oggetto ma come aggiungo un'altra proprietà nell'array di feed come: customText, non aggiorna quel custo mText ma il resto ... cercherò dove sto ancora facendo qualcosa di sbagliato ... grazie comunque! – Mar

+0

Se si desidera aggiungere proprietà arbitrarie a 'feeds ', quindi l'opzione deve essere impostata anche su quello schema incorporato. Vedi la risposta aggiornata. – JohnnyHK

+1

SÌ !!! :) La seconda opzione è esattamente quello che sto cercando di fare per ore! Molte grazie! – Mar

Problemi correlati