Като запален фен на mongodb, предлагам ви да използвате релационна база данни за силно релационни данни - това е, за което е създадена. Вие губите всички предимства на mongodb, когато трябва да извършите 3+ заявки, за да получите един обект.
Баууууу , знам, че този коментар ще остане глух. Най-добрият ви залог е да бъдете възможно най-съзнателни относно представянето. Първата ви стъпка е да ограничите полетата до необходимия минимум. Това е просто добра практика дори при основни заявки и всички машина за бази данни - получавайте само полетата, от които се нуждаете (напр. SELECT * FROM
===лошо... просто спри да го правиш!). Можете също така да опитате да правите щадящи заявки, за да спестите много работа след обработка, която mongoose върши с данните. Не съм тествал това, но трябва да работи...
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.
});
Също така, много "монго" начин да направите това, което искате, е да запазите препратка в SchemaC обратно към SchemaA. Когато казвам "монго" начин да го направите, трябва да се откъснете от годините си на мислене за заявки за релационни данни. Направете каквото е необходимо, за да извършите по-малко заявки в базата данни, дори ако това изисква двупосочни препратки и/или дублиране на данни.
Например, ако имах схема за книга и схема за автор, вероятно щях да запазя името и фамилията на авторите в колекцията Книги, заедно с препратка _id към пълния профил в колекцията Автори. По този начин мога да зареждам книгите си в една заявка, все пак да показвам името на автора и след това да генерирам хипервръзка към профила на автора:/author/{_id}
. Това е известно като „денормализиране на данни“ и е известно, че причинява на хората киселини. Опитвам се да го използвам върху данни, които не се променят много често - като имената на хората. В случай, че името се промени, е тривиално да се напише функция за актуализиране на всички имена на множество места.