рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, "SELECT N + 1" рдирд╛рдордХ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ - рдЬрдм рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рдмрдЬрд╛рдп, рдЬреЛ рдХрдИ рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдкрд╣рд▓реА рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд╢реНрд░реЗрдгреА рдмрдирд╛рддрд╛ рд╣реИ, рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд╢реНрд░реЗрдгреА рдмрдирд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡рд┐рд╢реЗрд╖ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рди рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд╢реНрд░реЗрдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрдкрд╢реНрд░реЗрдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреНрдп рдЙрдкрд╢реНрд░реЗрдгреА - рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рдиреЗ рд▓рдЧрддреА рд╣реИред
рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, "рд╕рд┐рд▓реЗрдХреНрдЯ рдПрди + 1" рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдпрджрд┐ рдЖрдк рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдЯреЗрдмрд▓ рдкрд░ рдПрдХ рдЙрдкрдХреБрдВрдЬреА рдмрдирд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдорди рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рддреБрд░рдВрдд рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣, рдЖрдкрдХреЛ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдпрд╣ рддрд░реНрдХрд╣реАрди рд╣реИред
рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреЗ рд▓рд┐рдП "рд╕реЗрд▓реЗрдХреНрдЯ рдПрди + 1" рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рд╕рдВрдЧреНрд░рд╣ рд▓реЗрдВ: "рд▓реЗрдЦрдХ" (рд▓реЗрдЦрдХ) рдФрд░ "рдкреБрд╕реНрддрдХреЗрдВ" (рдкреБрд╕реНрддрдХ)ред рд░рд┐рд╢реНрддрд╛ рдпрд╣ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╣реЛрдЧрд╛, рдХрдИ-рд╕реЗ-рдХрдИред рдПрдХ рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рд╕ рдХрдИ рдкреБрд╕реНрддрдХреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдПрдХ рдкреБрд╕реНрддрдХ рдХреЛ рдХрдИ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо mongodb рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ mongoose.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рд╣рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдмреБрдХрдЕрдереЛрд░ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЖрднрд╛рд╕реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ-рд╕реЗ-рдХрдИ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИред
рдЕрдм рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдореЗрдВ рд▓реЗрдЦрдХ рдФрд░ рдкреБрд╕реНрддрдХ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд╕реНрдкрд░ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрдирдХреА рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓.exports (рдЬреЛ рдореВрд▓ рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ) рдХреЛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХреЗ рдмрдВрдзрди рдХреЗ рдмрдЬрд╛рдп, рдирд┐рд░реНрдпрд╛рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд╝реАрд▓реНрдб рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╕рдордп "рдкреЛрд╕реНрдЯрдкреЛрди" рд▓рд┐рдВрдХ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрдм рддрдХ рд╕рднреА рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрдн рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ:
рдЕрдм рд╣рдо рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рдВрднрд╡рддрдГ рдЙрдирдХреА рдкреБрд╕реНрддрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде, рдФрд░ рд╕рдВрднрд╡рддрдГ, рдЗрди рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд▓реЗрдЦрдХреЛрдВ (рд╕рд╣-рд▓реЗрдЦрдХреЛрдВ) рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рдеред
const graphql = require('graphql'); const getFieldNames = require('graphql-list-fields'); const graphqlType = require('../graphqlType'); const mongoSchema = require('../mongoSchema'); module.exports = { type: new graphql.GraphQLList(graphqlType.Author), args: { _id: { type: graphql.GraphQLString } }, resolve: (_, {_id}, context, info) => { const fields = getFieldNames(info); const where = _id ? {_id} : {}; const authors = mongoSchema.Author.find(where) if (fields.indexOf('books.authors.name') > -1 ) { authors.populate({ path: 'books', populate: { path: 'book', populate: {path: 'authors', populate: {path: 'author'}} } }) } else if (fields.indexOf('books.title') > -1 ) { authors.populate({path: 'books', populate: {path: 'book'}}) } return authors.exec(); } };
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдЖрдпрд╛ рд╣реИ, рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓-рд▓рд┐рд╕реНрдЯ-рдлрд╝реАрд▓реНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реИ, рддреЛ рдореЛрдВрдЧреЛрдЬрд╝ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрдмрд╛рджреА () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдЕрдиреБрд░реЛрдз:
{ author { _id name books { _id title authors { _id name } } } }
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП 5 рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
authors.find({}, { fields: {} }) bookauthors.find({ author: { '$in': [ ObjectId("5b0fcab305b15d38f672357d"), ObjectId("5b0fcabd05b15d38f672357e"), ObjectId("5b0fcac405b15d38f672357f"), ObjectId("5b0fcad705b15d38f6723580"), ObjectId("5b0fcae305b15d38f6723581"), ObjectId("5b0fedb94ad5435896079cf1"), ObjectId("5b0fedbd4ad5435896079cf2") ] } }, { fields: {} }) books.find({ _id: { '$in': [ ObjectId("5b0fcb7105b15d38f6723582") ] } }, { fields: {} }) bookauthors.find({ book: { '$in': [ ObjectId("5b0fcb7105b15d38f6723582") ] } }, { fields: {} }) authors.find({ _id: { '$in': [ ObjectId("5b0fcab305b15d38f672357d"), ObjectId("5b0fcad705b15d38f6723580") ] } }, { fields: {} })
рдореЗрдВ' [ObjectId ( "5b0fcab305b15d38f672357d"), ObjectId ( "5b0fcabd05b15d38f672357e"), ObjectId ( "5b0fcac405b15d38f672357f"), ObjectId ( "5b0fcad705b15d38f6723580"), ObjectId ( "5b0fcae305b15d38f6723581"), ObjectId authors.find({}, { fields: {} }) bookauthors.find({ author: { '$in': [ ObjectId("5b0fcab305b15d38f672357d"), ObjectId("5b0fcabd05b15d38f672357e"), ObjectId("5b0fcac405b15d38f672357f"), ObjectId("5b0fcad705b15d38f6723580"), ObjectId("5b0fcae305b15d38f6723581"), ObjectId("5b0fedb94ad5435896079cf1"), ObjectId("5b0fedbd4ad5435896079cf2") ] } }, { fields: {} }) books.find({ _id: { '$in': [ ObjectId("5b0fcb7105b15d38f6723582") ] } }, { fields: {} }) bookauthors.find({ book: { '$in': [ ObjectId("5b0fcb7105b15d38f6723582") ] } }, { fields: {} }) authors.find({ _id: { '$in': [ ObjectId("5b0fcab305b15d38f672357d"), ObjectId("5b0fcad705b15d38f6723580") ] } }, { fields: {} })
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, mongoose.js рдлрд╝рдВрдХреНрд╢рди - рдкреЙрдкреНрдпреБрд▓реЗрдЯ () - рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдП рдореЛрдВрдЧреЙрдбрдм рд╕реБрд╡рд┐рдзрд╛ - $ рд▓реБрдХрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдз рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ "рд╕реЗрд▓реЗрдХреНрдЯ рдПрди + 1" рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреНрд╡реЗрд░реА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдПред (рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХрд┐ рдореЛрдВрдЧреЛрдЬрд╝реЛ.рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдЖрдмрд╛рдж рд╣реЛрддреЗ рд╣реИрдВ) (рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдПрдХ рдЕрдиреБрд░реЛрдз рдпрд╛ рдХрдИ рдХреЗ рд╕рд╛рде - рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЪреБрдирдиреЗ рдХрд╛ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рдерд╛)ред
рдпрджрд┐ рд╣рдо рдПрдХ рдиреНрдпреВрдирддрдо рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
{ author { _id name } }
рддрдм рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓ рдмрдирд╛рдПрдЧрд╛:
authors.find({}, { fields: {} })
рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдорд╛рдВрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреА, рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЙрдиреНрдирдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓реЗ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдЖрдпрд╛, рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдпрджрд┐ рдЧреНрд░реЗрдлреНрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмреИрдХреЗрдВрдб рдкрдХреНрд╖ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рд╕реЗ рдРрд╕реА рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛрд▓рддреЗ рд╣реИрдВ (рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА), рддреЛ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдУрдкрди рдПрдХреНрд╕реЗрд╕ рдореЗрдВ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд░рдЦрдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреИрд╕реЗ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ
рдкрд╛рдардХреЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд
рд╣реИ ред
рдЬреЛрдВрдХ рдЯрд┐рдкреНрдкрдгреА рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдкреВрд░рдХ
рдлрд╝реАрдб рдореЗрдВ рдЬреЛрдВрдХ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
https://github.com/facebook/dataloader рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ "SELECT N + 1" рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреИрд╕реЗ рдЬреВрдЭрдиреЗ рджреЗрддреА рд╣реИ
рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдПрдХ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рд▓реЗрдЦрдХ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
рдЗрд╕ рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: рдПрдХрд▓ рдмреБрдХрдУрд▓реЗрдбрд░.рд▓реЛрдб (рдЖрдИрдбреА) рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЙрдиреНрд╕реНрдЯ рдмреБрдХрдУрд▓рд╛рдбрд░ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ = рдирдпрд╛ рдбреЗрдЯрд╛рд▓реЙрдбрд░ (async рдЖрдИрдбреА => {...)
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рд╡рд╛рджреЛрдВ рдпрд╛ рд╕рд░рдгреА рдХреЗ рд╡рд╛рджреЗ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдИрдбреА рдЗрдирдкреБрдЯ рд╕рд░рдгреА рдХреЗ рд╕рдорд╛рди рдХреНрд░рдо рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред
рдЕрдм рд╣рдо рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЪрдпрди N + 1 рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдПрдХ рдордирдорд╛рдиреЗ рд╕реНрддрд░ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд┐рдирд╛ рдЬрд░реВрд░рдд рдХреЗ рдкреЙрдкреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЗ рдХреЙрд▓ рдкрд░) (рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА):
{ authors { _id name books { _id title authors { _id name books { _id title authors { _id name } } } } } }
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо SQL рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдкрд░ рдПрдХ рд╕рдордЧреНрд░ рдХреНрд╡реЗрд░реА рд╣реЛрдЧреАред рдЙрд╕реА рд╕рдордп, рдХрднреА-рдХрднреА рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рд╕реАрдзреЗ рдбрдЯрд▓реЛрдбрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛-рд▓реЛрдбрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
apapacy@gmail.com
рейрез рдордИ реирежрез8