Mongoose: рдЙрдк-рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╡рд░реНрдЪреБрдЕрд▓, рд╡рд░реНрдЪреБрдЕрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдлрд╝рд░ре░ 2011  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

var Page = new Schema({
    author: {
        first_name: String
      , last_name: String
    }
});
Page.virtual("author.full_name").get(function() {
    return this.author.first_name + " " + this.author.last_name;
});

// Later
myPage = new Page({author: {first_name: "John", last_name: "Doe"}});
myPage.author.full_name; // == undefined
myPage.get("author.full_name"); // == "John Doe"

рдореИрдВрдиреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╕реНрдХреАрдорд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдк-рд╕реНрдХреАрдорд╛ рд╕рд░рдгреА рдПрдЯреАрдПрдо рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рд╕рд╛рджреЗ рдЙрдк-рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВред

рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЕрд╕рдВрднрд╡ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдХреБрдЫ рдЪрд╛рд▓рд╛рдХ рд╡рд┐рднрд╛рдЬрди ("ред") рддрд░реНрдХ рдЧреБрдо рд╣реИ рдЬрдмрдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛ рд╕реНрдХреАрдорд╛ рдкреЗрдбрд╝ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред :)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреАрдорд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

Variation.set('toJSON', {
    virtuals: true
});

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмреЗрд╢рдХ рдпрд╣ рдлрд┐рдХреНрд╕ рдЙрдк-рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд▓реЗрдЦрдХ рдПрдХ рд╕рд░рдгреА рд╣реИ? рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП +1 рд╕рдорд░реНрдерди

рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП +100 рд╕рдорд░реНрдерди

рдЗрд╕реЗ рд╕рдордЭ рд▓рд┐рдпрд╛:ред

var Variation = new Schema({
  label: {
    type: String
  }
});

// Virtual must be defined before the subschema is assigned to parent schema
Variation.virtual("name").get(function() {

  // Parent is accessible
  var parent = this.parent();
  return parent.title + ' ' + this.label;
});


var Product = new Schema({
  title: {
    type: String
  }

  variations: {
    type: [Variation]
  }
});

рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреАрдорд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

Variation.set('toJSON', {
    virtuals: true
});
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rohan-paul picture rohan-paul  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AraanBranco picture AraanBranco  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

weisjohn picture weisjohn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jeremyml picture jeremyml  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

simonxca picture simonxca  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ