En tant que fan passionné de mongodb, je vous suggère d'utiliser une base de données relationnelle pour les données hautement relationnelles - c'est pour cela qu'elle est conçue. Vous perdez tous les avantages de mongodb lorsque vous devez effectuer plus de 3 requêtes pour obtenir un seul objet.
Buuuuut , je sais que ce commentaire tombera dans l'oreille d'un sourd. Votre meilleur pari est d'être aussi conscient que possible de la performance. Votre première étape consiste à limiter les champs au minimum requis. Il s'agit simplement d'une bonne pratique, même avec des requêtes de base et toutes moteur de base de données - n'obtenez que les champs dont vous avez besoin (ex. SELECT * FROM
===mauvais... arrêtez de le faire !). Vous pouvez également essayer de faire des requêtes allégées pour économiser beaucoup de travail de post-traitement que Mongoose fait avec les données. Je n'ai pas testé ça, mais ça devrait marcher...
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.
});
De plus, une façon très "mongo" de faire ce que vous voulez est de sauvegarder une référence dans SchemaC vers SchemaA. Quand je parle de façon "mongo" de le faire, vous devez rompre avec vos années de réflexion sur les requêtes de données relationnelles. Faites tout ce qu'il faut pour effectuer moins de requêtes sur la base de données, même si cela nécessite des références bidirectionnelles et/ou une duplication de données.
Par exemple, si j'avais un schéma Book et un schéma Author, j'enregistrerais probablement le prénom et le nom de l'auteur dans la collection Books, avec une référence _id au profil complet dans la collection Authors. De cette façon, je peux charger mes livres en une seule requête, afficher toujours le nom de l'auteur, puis générer un lien hypertexte vers le profil de l'auteur :/author/{_id}
. C'est ce qu'on appelle la « dénormalisation des données », et on sait qu'elle donne des brûlures d'estomac aux gens. J'essaie de l'utiliser sur des données qui ne changent pas très souvent - comme les noms des personnes. Dans le cas où un nom change, il est trivial d'écrire une fonction pour mettre à jour tous les noms à plusieurs endroits.