In quanto fan accanito di mongodb, ti suggerisco di utilizzare un database relazionale per dati altamente relazionali:ecco per cosa è stato creato. Stai perdendo tutti i vantaggi di mongodb quando devi eseguire più di 3 query per ottenere un singolo oggetto.
Buongiorno , so che quel commento cadrà nel vuoto. La soluzione migliore è essere il più consapevole possibile delle prestazioni. Il primo passo è limitare i campi al minimo richiesto. Questa è solo una buona pratica anche con query di base e qualsiasi motore di database - ottieni solo i campi che ti servono (es. SELECT * FROM
===pessimo... smettila di farlo!). Puoi anche provare a eseguire query snelle per risparmiare molto del lavoro di post-elaborazione che Mongoose fa con i dati. Non l'ho testato, ma dovrebbe funzionare...
SchemaA.find({}, 'field1 fieldB', { lean: true })
.populate({
name: 'fieldB',
select: 'fieldC',
options: { lean: true }
}).exec(function (err, result) {
// not sure how you are populating "result" in your example, as it should be an array,
// but you said your code works... so I'll let you figure out what goes here.
});
Inoltre, un modo molto "mongo" per fare ciò che vuoi è salvare un riferimento in SchemaC su SchemaA. Quando dico modo "mongo" di farlo, devi rompere i tuoi anni di pensiero sulle query di dati relazionali. Fai tutto il necessario per eseguire meno query sul database, anche se richiede riferimenti bidirezionali e/o duplicazione dei dati.
Ad esempio, se avessi uno schema Libro e uno schema Autore, probabilmente salverei il nome e il cognome degli autori nella raccolta Libri, insieme a un riferimento _id al profilo completo nella raccolta Autori. In questo modo posso caricare i miei libri in un'unica query, visualizzare ancora il nome dell'autore e quindi generare un collegamento ipertestuale al profilo dell'autore:/author/{_id}
. Questo è noto come "denormalizzazione dei dati" ed è noto per causare bruciore di stomaco alle persone. Cerco di usarlo su dati che non cambiano molto spesso, come i nomi delle persone. Nell'occasione in cui un nome cambia, è banale scrivere una funzione per aggiornare tutti i nomi in più punti.