Ho difficoltà a capire come inserire più profondità dello schema nidificato in MongoDB, tramite Mongoose e node.js.Node, Mongoose, problemi durante il salvataggio di più profondità dello schema nidificato
L'esempio riportato di seguito è un po 'forzato ma dovrebbe eventualmente spiegare il mio problema. Per quanto riguarda il motivo per cui ogni schema è definito come un modello completo ma non utilizzato nell'esempio, è solo perché nel mio problema del mondo reale sono modelli reali e utilizzabili e volevo che questo esempio fosse realistico nel caso fosse pertinente.
Quindi, ecco le definizioni dello schema di esempio nell'ordine inverso, vale a dire. più piccolo russo-doll prima:
// Define pen model
var PenSchema = new Schema({
color: String // black, blue or red
});
var Pen = mongoose.model('Pen', PenSchema);
// Define ruler model
var RulerSchema = new Schema({
units: String // inches or millimetres
});
var Ruler = mongoose.model('Ruler', RulerSchema);
// --------
// Define drawing tools model
var DrawingToolsSchema = new Schema({
label: String,
pens: [Pen]
});
var DrawingTools = mongoose.model('DrawingTools', DrawingToolsSchema);
// Define measuring tools model
var MeasuringToolsSchema = new Schema({
label: String,
ruler: [Ruler]
});
var MeasuringTools = mongoose.model('MeasuringTools', MeasuringToolsSchema);
// --------
// Define stationery box model
// It has a label and two compartments - tools for drawing and measuring
var StationeryBoxSchema = new Schema({
label: String,
drawingTools: [DrawingToolsSchema],
measuringTools: [MeasuringToolsSchema]
});
var StationeryBox = mongoose.model('StationeryBox', StationeryBoxSchema);
Speriamo che si può dire per questo che c'è un modello principale, StationeryBox, che ha un'etichetta e contiene due scomparti per DrawingTools e MeasuringTools che sono annidati schema. A loro volta hanno le loro etichette e contengono schemi nidificati per penne e righelli. Il problema che sto avendo è inserito il nesting di secondo livello, es. penne/governanti. Pertanto, in base ai documenti di mangusta, la creazione del modello di livello superiore e il push nei primi oggetti nidificati funzionano correttamente, quindi si verificano problemi di attacco. Per esempio:
// To create my stationery box - this works
var stationery = new StationeryBox({ label: 'My Stationery Box' });
// To add the nested compartments - this works
stationery.drawingTools.push({ label: 'My Pens' });
stationery.measuringTools.push({ label: 'My Rulers' });
// But this is wrong as 'stationery.drawingTools.pens' is undefined
stationery.drawingTools.pens.push({ color: 'red' });
stationery.drawingTools.pens.push({ color: 'black' });
E se torno un passo e cercare di inserire le penne allo stesso tempo, come gli strumenti di disegno:
// Also wrong - presumably the second level of nesting is the problem
stationery.drawingTools.push({
label: 'My Pens',
pens: [ // These object represent second levels of nested schema
{ color: 'red' },
{ color: 'black' }
]
});
So che questo non è un esempio di super-realistica , ma è un esempio semplificato di un sistema reale che sto costruendo e questo era il modo più semplice per illustrarlo.
Il salvataggio effettivo avviene dopo questo ovviamente e l'ho lasciato fuori, ma devo aggiungere questi prossimi livelli nel richiamo di salvataggio forse?
Se qualcuno può dirmi dove sto sbagliando su questo o indicarmi la giusta direzione, ti comprerò una bella torta (solo torta immaginaria ho paura, a meno che tu non viva vicino a me).
Grazie Daniel. Certo, hai pienamente ragione. Sono passati alcuni giorni da quando ho postato il problema originale e ho imparato molto in quel momento, quindi non posso davvero ricordare se provavo ad incorporare il modello e non lo schema era solo un refuso nel mio codice di esempio (in cui caso ho avuto qualcosa di sbagliato da qualche altra parte) o se avessi fatto lo stesso errore nel mio codice "mondo reale" (che è cambiato molto da allora, quindi non posso controllare;)). Ma come dici tu spiegherebbe il comportamento successivo, quindi probabilmente hai ragione! – tdous
Piacere mio - ho capito che alcuni giorni sono lunghi quando si lavora a qualcosa del genere. Probabilmente la parte più ripida della curva di apprendimento del nodo è capire come eseguire il debug dei problemi che falliscono silenziosamente. –