Mongoose: рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдХреЙрд▓рд┐рдВрдЧ рдкреЙрдкреНрдпреБрд▓реЗрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдирд╡ре░ 2011  ┬╖  93рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рдЕрд░реЗ,
рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреАрдорд╛ рд╣реИрдВ (рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓реАрдХреГрдд)

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = рдирдИ рд╕реНрдХреАрдорд╛
рд▓реЙрдЧрд┐рди: рд╕реНрдЯреНрд░рд┐рдВрдЧ

рдП = рдирдИ рд╕реНрдХреАрдорд╛
рдПрдВрдм: [рдмреА]
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ: [рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ]

// рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдореНрдмреЗрдбреЗрдб рд╕реНрдХреАрдорд╛

рдмреА = рдирдИ рд╕реНрдХреАрдорд╛
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ: [рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ]

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ = рдирдИ рд╕реНрдХреАрдорд╛
рд░рдЪрдирд╛рдХрд╛рд░:
рдЯрд╛рдЗрдк рдХрд░реЗрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА
рд╕рдВрджрд░реНрдн: 'рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛'
рд╕рдВрджреЗрд╢: рд╕реНрдЯреНрд░рд┐рдВрдЧ

рдЕрдм рдЬрдмрдХрд┐ рдкреЙрдкреНрдпреБрд▓реЗрдЯ A . рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЬреИрд╕реЗ A.find().populate('comments.creator')

рдпрд╣ рдбрдмрд▓ рдиреЗрд╕реНрдЯреЗрдб рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЬреИрд╕реЗ A.find().populate('emb.comments.creator')

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

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

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдзрд╛рдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЧрд╣рд░рд╛рдИ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://github.com/buunguyen/mongoose-deep-populateред

рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

post.deepPopulate('votes.user, comments.user.followers, ...', cb);
Post.deepPopulate(posts, 'votes.user, comments.user.followers', cb);

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдкреНрд▓рдЧрдЗрди рд░реЗрдкреЛ рджреЗрдЦреЗрдВред

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

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрддрд░реЛрдВ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред

рд╣рд╛рдп рдПрдирдХреЛ,

рдЖрдк рдпрд╣ рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЬрдм рдЖрдк рдЕрдкрдиреА рдкрд╣рд▓реА рдЖрдмрд╛рджреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рдЖрдЗрдЯрдо рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЙрдирдХреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЖрдмрд╛рджреА рд╡рд╛рд▓реЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ? рдЬрдм рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрднреА рдЪрд┐рдкрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреБрдЫ рдХреЛрдб рдХрдорд╛рд▓ рдХрд╛ рд╣реЛрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж,
рдкреЙрд▓

@eneko рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдмрд╕ рдЬрд░реВрд░рдд рд╣реИ .toObject ();)

рдЕрд╕рд▓ рдореЗрдВ рдкреЙрд▓, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ populate() рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХрд╛рдзрд┐рдХ рддрддреНрд╡ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд╛рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЧреБрдг рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВ рддреЛ рдЖрдкрдХреЛ .toObject рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

// Ideally should be Parent.findOne().populate('children').populate('children.grandchildren').run();

function loadParentWithChildrenAndGrandChildren(parentId) {

  // Load parent without children references (children is array of ObjectId)
  Parent.findOne({ id: parentId }, { children: 0 }, function(err, parent) {
    if (err || !parent) return next(new Error("Parent not found: " + parentId));

    // Load children for this parent, populating grandchildren (no need to load parent reference)
    Children.find({ parent: parent._id }, { parent: 0 })
      .populate('grandchildren', [], { })
      .run(function(err, children) {
        if (err) return next(new Error("Could not load children: " + parentId));

        var result = parent.toObject();
        result.children = children;
        next(null, result);
      });
  });

}

рдЖрд╣, рдЖрдкрдХреЗ рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдХреА рдиреЗрд╡рд▓рд╛ рдХреЙрд▓ рдореЗрд░реА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реАрдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрддрд╛ рд╣реИ рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЖрдмрд╛рджреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рдлрдВрд╕ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

var viewWithId_forDisplay = function(id, callback) {
if ( !id || typeof id === 'undefined' || id.toString().match(app_utils.emptyReg) ) {
    throw new Error('Bad user ID.');
}

View.findById(id)
.run(function(err, obj) {
    if ( err || !obj || !obj.subviews || !obj.subviews.length ) return callback(err, obj);

    obj = obj.toObject();

    // recursive subview fetch
    async.map( obj.subviews, viewWithId_forDisplay, function(err, results) {
        obj.subviews = results;

        return callback(err, obj);
    } );

})
}

рдХреНрдпрд╛ рдпрд╣ рдЕрдм рдирд╡реАрдирддрдо рдиреЗрд╡рд▓рд╛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рдореБрджреНрджрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдкреНрдкрдгреА рд╡рд╕реНрддреБ рдореЗрдВ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╕реНрддреБ рд╣реЛрддреА рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдореНрдмреЗрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди (рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ) рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

var get_activities = function (callback) {
  var _this = this
  Activity.find({}, [], {sort:{ _id: -1 }})
  .populate('user')
  .populate('comments')
  .run(function (error, activities) {
    callback(error, activities)
  })
}

var User = new Schema({
    id: { type: String, required: true, lowercase: true, index: { unique: true } }
  , email_address: { type: String, required: true, index: true }
  , name: { type: String, required: true }
  , first_name: { type: String,  required: true } 
  , last_name: { type: String, required: true }
  , user_name : { type: String, required: true, lowercase: true, index: { unique: true } }
  , avatar_url: { type: String, required: true }
  , bio: String
  , following: [{ type: Schema.ObjectId, ref: 'User', index: { unique: true } }]
  , followers: [{ type: Schema.ObjectId, ref: 'User', index: { unique: true } }]
})

var Activity = new Schema({
    id: { type: Number, required: true, index: { unique: true } }
  , user: { type: Schema.ObjectId, ref: 'User', required: true }
  , recipients: [{ type: String, index: { unique: true } }]
  , type: String  
  , body: { type: String, required: true }
  , timestamp: { type: Date, required: true }
  , likes: [{ type: Schema.ObjectId, ref: 'User', index: { unique: true } }]
  , comments: [{ type: Schema.ObjectId, ref: 'Comment' }]
})

var Comment = new Schema({
    id: { type: String, required: true, index: { unique: true } }
  , timestamp: { type: Date, required: true }
  , body: { type: String, required: true }
  , user: { type: Schema.ObjectId, ref: 'User', required: true } 
}) 

рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рдкрдереЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?

рд╣рд╛рдБ рд╣рдо рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдореБрджреНрджрд╛ рдмрди рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рд╛рдБ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИред рддреЛ рдореИрдВ рдЕрдкрдирд╛ рдХрд╛рдо рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП +1 рд╣реВрдВ ;-)

рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛, рдФрд░ рдкреГрд╖реНрда рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рднреА рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЧрд╣рд░реЗ рдиреЗрд╕реНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдореИрдВ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛;

Parent.findById(1).populate('child').run(function (err, parent) {
  parent.child.populate('grandchild', function (err) {
    console.log(parent.child.grandchild)
  })
})

рдЗрд╕ рддрд░рд╣ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЬрд╣рд╛рдБ рддрдХ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдЖрдк рдЧреЛрддрд╛ рд▓рдЧрд╛рддреЗ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред

@Qard рддреБрдордиреЗ рдореЗрд░рд╛ рджрд┐рдорд╛рдЧ рдкрдврд╝рд╛ред

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

рдХреНрдпрд╛ https://github.com/LearnBoost/mongoose/issues/601#issuecomment -3258317 рдЬреИрд╕рд╛ рдХреБрдЫ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдореИрдВ рд╡рд╣реА рдмрд╛рдд рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рдбреЙрдХреНрдЯрд░ рдмрд╛рд▓ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред @dbounds рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рдореЙрдбрд▓ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рд╣реИ: https://github.com/LearnBoost/mongoose/issues/601#issuecomment -3088564ред рдореБрдЭреЗ рдиреЗрд╡рд▓реЗ-рд░рд┐рд╢реНрддреЗ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ

рдЗрд╕ рдереНрд░реЗрдб рдХреА рдЬрд╛рдирдХрд╛рд░реА .populate() рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд░рд╣реА рд╣реИ, рдкреЛрддреЗ-рдкреЛрддрд┐рдпреЛрдВ рдХреА рдиреЗрд╕реНрдЯреЗрдб рдЖрдмрд╛рджреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрддрдорд╛рди рд╕реАрдорд╛ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд▓реБрдХрдЕрдк рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ .toObject() рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕реА рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП .toObject() рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдФрд░ рдкреЛрддреЗ-рдкреЛрддрд┐рдпреЛрдВ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж b\c рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрднреА рднреА рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо parent.childarray.id(x) рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рдпрд╛ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХреЗрдВ рдФрд░ .save() рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВред

рдпрд╣рд╛рдВ рдЬреЛ рднреА рдорджрдж рдХрд░реЗрдВрдЧреЗ рдЙрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдиреЛрдЯ: рд╣рдордиреЗ parent.set ('child.grandchild', value) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╣рдо рдЕрдм рдЙрд╕ рдкрде рд╕реЗ рдорд╛рди рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ (рддреНрд░реБрдЯрд┐ рдЕрдорд╛рдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рд╣реИ рдЬрдм рдкреИрд░реЗрдВрдЯ.рдЪрд╛рдЗрд▓реНрдб рдпрд╛ рдкреЗрд░реЗрдВрдЯ.рдЪрд╛рдЗрд▓реНрдб.рдЧреНрд░реИрдВрдбрдЪрд╛рдЗрд▓реНрдб рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реЛ)ред

@aheckmann рдЗрд╕ рдкрд░ рдЕрднреА рддрдХ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдмрд╣реБрдд рд╡реНрдпрд╕реНрддрддрд╛ рдереАред рдореИрдВ рдЗрд╕реЗ 3.0 рдлрд╛рдЗрдирд▓ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

@aheckmann рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдЖрдкрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдорд╣рд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реА рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдореИрдВрдиреЗ рдиреЗрд╡рд▓рд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд░рдд рд▓рд┐рдЦреА рд╣реИ рдЬреЛ рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд░реВрдк рд╕реЗ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдЙрдк-рдЖрдмрд╛рджреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░ рджреВрдВ рдФрд░ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреВрдВ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкреА! рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдкреИрдЪрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдЕрднреА рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╕реБрдЦрдж рд╣реИрдХ :) рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрд╡рд▓рд╛ рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рд╕рдордп рдПрдХ рдмрдВрджрд░-рдкреИрдЪ рд╣реИред рдореИрдВ рдХреБрдЫ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреВрдВрдЧрд╛, рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рднреАрддрд░ рдпрд╣рд╛рдВ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ред

рдХреНрдпрд╛ рдЗрд╕реЗ рд╕рдВрд╕реНрдХрд░рдг 3.0 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛?

@hackfrag рд╣рд╛рдБ

рдХреНрдпрд╛ рдпрд╣ 3.0 рдореЗрдВ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЕрднреА рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ :)

рдпрд╣ 3.0 рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдЖрдЧрд╛рдореА рд▓рдШреБ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрдард┐рди рд╕рдордп рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рдХрдм рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддреА рд╣реИ? рдпрджрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдЪреНрдЪрд╛ рд╕рдорд░реНрдерди рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдмрджрд╕реВрд░рдд рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ :)ред рдФрд░ рдХреНрдпрд╛ рдореИрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рднрдпрд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Stowns, рдореЗрд░реА рд╣реИрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдЕрдм рдореИрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ 24 рдШрдВрдЯреЗ рдХреЗ рднреАрддрд░ рдЖрдкрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реВрдВрдЧрд╛ - рдкрд╣рд▓реЗ Mongoose 3 рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

тАФ рдЬреЛрд╢реБрдЖ рдЧреНрд░реЙрд╕
рдИрд╕рд╛рдИ / рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рд╕рд▓рд╛рд╣рдХрд╛рд░ / рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдмреАрдП рдЙрдореНрдореАрджрд╡рд╛рд░, рдпреВрдбрдмреНрд▓реНрдпреВ-рдореИрдбрд┐рд╕рди 2013
414-377-1041 / http://www.joshisgross.com

13 рдЕрдЧрд╕реНрдд 2012 рдХреЛ рд╢рд╛рдо 6:56 рдмрдЬреЗ, рд╕реНрдЯреМрдВрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрдард┐рди рд╕рдордп рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рдХрдм рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддреА рд╣реИ? рдпрджрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдЪреНрдЪрд╛ рд╕рдорд░реНрдерди рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдмрджрд╕реВрд░рдд рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ :)

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

@ рдЬреЛрд╢реБрдЖ рдЧреНрд░реЙрд╕ рдЕрд░реЗ рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рд╣реИрдХ рдХреЛ рдПрдХ рд╕рд╛рд░ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдореЗрд░рд╛ рдХреЛрдб рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рдЧрдиреНрджрд╛ рдФрд░ рдмрджрд╕реВрд░рдд рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ...

рдЕрд░реЗ @madhums , @stowns , @aheckmann , @farhanpatel , @hackfrag , @jsalonen , рдЖрджрд┐ред рдореЗрд░рд╛ рд╣реИрдХ (рдХреЗрд╡рд▓ Mongoose 2.7 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛) рдпрд╣рд╛рдВ рд╣реИ: https://github.com/JoshuaGross/mongoose-subpopulate

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИред

рд╡рд╛рд╣ рдпрд╣реЛрд╢реВ! рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рддреБрд░рдВрдд рджреЗрдЦ рд▓реВрдВрдЧрд╛!

рдзрдиреНрдпрд╡рд╛рдж @JoshuaGross , рдЖрдЬ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ

рдРрд╕рд╛ рддрдм рд╣реЛрдирд╛ рдерд╛ рдЬрдм рдХрд┐рд╕реА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ "рдкреЙрдкреНрдпреБрд▓реЗрдЯ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реИ? рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА? рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдХреНрдпрд╛ рдиреЗрд╕реНрдЯреЗрдб рдкреЙрдкреНрдпреБрд▓реЗрдЯ () рдХреЙрд▓ рдЕрднреА рддрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ:

List.findById(req.params.id).populate('items').populate('items.user').exec(fn);

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЧрд╣рд░рд╛ рдШреЛрдВрд╕рд▓рд╛ рд╣реИ ... рдХреНрдпрд╛ рдЗрд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

@chovy рдЪреЗрдХ рдЖрдЙрдЯ https://github.com/JoshuaGross/mongoose-subpopulate

@aheckmann рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдиреЗрд╡рд▓рд╛-рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдиреЗрд╡рд▓рд╛-рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ 3 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред

рдореЗрд░реА рдПрдХ рд╢рд╛рдЦрд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╛рдлреА рд╡реНрдпрд╕реНрдд рд╣реВрдВред рд╡реЛ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣реИред

рдмреБрдз, рдЕрдХреНрдЯреВрдмрд░ 3, 2012 рдЕрдкрд░рд╛рд╣реНрди 11:37 рдмрдЬреЗ, рдПрдВрдердиреА рдПрдЯрд┐рдВрдЧрд░
рд╕реВрдЪрдирд╛рдПрдВ@github.comрд▓рд┐рдЦрд╛ рд╣реИ :

рдиреЗрд╡рд▓рд╛-рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ 3 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHubhttps: //github.com/LearnBoost/mongoose/issues/601#issuecomment -9131991 рдкрд░ рджреЗрдЦреЗрдВред

рд╣рд╛рд░реВрди
@aaronheckmann https://twitter.com/#!/aaronheckmann

@chovy рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдиреЗрд╡рд▓рд╛ 3 рд╣реИ? рдореИрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╕ 3 рдХреЗ рд╕рд╛рде рдиреЗрд╡рд▓рд╛-рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд╣рд╛рдБ, рдиреЗрд╡рд▓рд╛ 3 рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ред

@aheckmann - рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ!

рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдХрд┐ рдиреЗрд╡рд▓рд╛-рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП +1

рдЗрд╕рдХреЗ рд▓рд┐рдП +1

рд╕рд░рдгреА рдХреЗ рд╕рд░рдгреА рдмрдЪреНрдЪреЗ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

var notifications = new Schema({
    _id             : { type : ObjectId }
    , from          : { type : ObjectId, ref: 'user' }
    , status                : { type : Number, default : 1 }
    , created_at            : { type : Date }
    , updated_at            : { type : Date }
});

var applications = new Schema({
    _id                     : { type : ObjectId, required : true, ref : 'application' }
    , notifications                 : [notifications]
});

var schema = new Schema({
    name                        : { type : String, required : true }
    , email                     : { type : String }
    , applications                      : [applications]
    , created_at                        : { type : Date }
    , updated_at                        : { type : Date }
});

var User = module.exports = mongoose.model('user', schema);

рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░реЗрд╖рдХ рдХрд╛ рдирд╛рдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

// works like a charm
User.findOne({_id:'me'}).populate('applications');

// doesn't work
User.findOne({_id:'me'}).populate('applications.notifications.from');

рдпрд╛ рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рдХреНрд╡реЗрд░реА рдХрд░рддрд╛ рд╣реИ?

рдЖрдкрдХреЛ "рд╕реЗ" рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреИрд╕реЗ рдЖрдк рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрдкрдХреЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдЖрдмрд╛рджреА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдЧрд░ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдЧрд╣рд░реЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдмреИрд▓ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ ...

+1, рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рдиреАрдЪреЗ рдкрд╣реБрдВрдЪ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдВрджрд░ рдерд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред :(

+1, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдордпрд░реЗрдЦрд╛ рдЕрдиреБрдорд╛рди? рдпрд╣ рдкрд╛рдЧрд▓рдкрди рдХреА рд╣рдж рддрдХ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

@winduptoy 3.6 рдХреА рддрд░рд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ

+1 рдпрд╣рд╛рдБ рднреАред

рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдореВрд▓ рд╡рд╕реНрддреБ рдкрд░ toObject () рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдЦреБрдж рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рд╕реЗрдЯ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реБрд╕рдВрдЧрдд рд░рдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдиреЗрд╡рд▓рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдирд┐рдпрдо рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд╣рдореЗрдВ рдиреЗрд╡рд▓реЗ рдХреЛ рдХреЗрд╡рд▓ рдореЛрдВрдЧреЛ рдЖрдИрдбреА рдореЗрдВ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдВрджрд░реНрднрд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рдкреВрд░реА рд╡рд╕реНрддреБ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рд╕реНрдирдлреВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдиреЗрд╡рд▓реЗ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИред

рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВред

+1 рдореБрдЭреЗ рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

рдЗрд╕ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП +1

+1 - рдЗрд╕рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВ

+1 рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

+1 рдпрд╣ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдФрд░ рдкреНрд░рддреАрдХ рдбрд╛рд▓рддреЗ рд╣реИрдВ рддреЛ рдорджрдж рдорд┐рд▓реЗрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

User.findOne({_id:'me'}).populate('applications$notifications.from');
// Arrays $
// Simple document point "."

рддреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪреЗрдВ рдирд╣реАрдВ... рдирд╣реАрдВ?

+2

+1 рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

+1 рдРрд╕рд╛ рдХрд░рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдХреГрдкрдпрд╛ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ 2013 рдореЗрдВ рдЬрд╛рд░реА рдХрд░реЗрдВ

+1 рдореБрдЭреЗ рдЕрднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдЖрдк рдореЗрдВ рд╕реЗ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдк рдиреЗрд╡рд▓рд╛-рдЙрдк-рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдХрдИ рдорд╣реАрдиреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://github.com/JoshuaGross/mongoose-subpopulate (рдореИрдВ рдЕрдиреБрд░рдХреНрд╖рдХ рд╣реВрдВ)

рдпрд╣рд╛рдБ 3.6 рдореЗрдВ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ: https://github.com/LearnBoost/mongoose/pull/1292

+1 рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реА рд╢реБрд░реВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡реЛрдЯ рд╕реЗ, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЬреАрдд рд▓рд┐рдпрд╛!

рдХрд┐рдпрд╛ рд╣реБрдЖред https://github.com/LearnBoost/mongoose/wiki/3.6-pre-release-notes

@aheckmann рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж !!

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ lean() рд╕реЗ рднреА рдкреНрдпрд╛рд░ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдм рддрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд╛рдирджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ!

3.6 рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

рдзрдиреНрдпрд╡рд╛рдж рд╢реНрд░реАрдорд╛рди!

5 рдорд╛рд░реНрдЪ 2013 рдХреЛ рд╢рд╛рдо 5:26 рдмрдЬреЗ, рдПрдВрдбреА рдмрд░реНрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

3.6 рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

@aheckmann рдЧреНрд░реЗрдЯ, рдзрдиреНрдпрд╡рд╛рдж!

рдзрдиреНрдпрд╡рд╛рдж!!! рдЕрдЪреНрдЫрд╛ рдХрд╛рдо!!!

рд╡рд╣ рддреЛ рдХрдорд╛рд▓ рд╣реИ! рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

var UserSchema, WineRating, WineSchema, mongoose;

UserSchema = new mongoose.Schema({
  wine_ratings: {
    type: [
      {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'WineRating'
      }
    ]
  }
});
mongoose.model("User", UserSchema);

WineRating = new mongoose.Schema({
  wine: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Wine'
  }
});
mongoose.model("WineRating", WineRating, 'wine_ratings');


WineSchema = new mongoose.Schema({
  name: String
});
mongoose.model("Wine", WineSchema);

mongoose.model("User").findById(user._id).populate('wine_ratings.wine').exec(function(err, user) {});
/*
gets exception: 
TypeError: Cannot call method 'path' of undefined
    at search (/Users/flockonus/workspace/az/api/node_modules/mongoose/lib/model.js:1830:28)
    at search (/Users/flockonus/workspace/az/api/node_modules/mongoose/lib/model.js:1849:22)
    at Function._getSchema (/Users/flockonus/workspace/az/api/node_modules/mongoose/lib/model.js:1856:5)
    at populate (/Users/flockonus/workspace/az/api/node_modules/mongoose/lib/model.js:1594:22)
    at Function.Model.populate (/Users/flockonus/workspace/az/api/node_modules/mongoose/lib/model.js:1573:5)
    at Query.findOne (/Users/flockonus/workspace/az/api/node_modules/mongoose/lib/query.js:1633:11)
    at exports.tick (/Users/flockonus/workspace/az/api/node_modules/mongoose/lib/utils.js:393:16)
*/

рдХреНрдпрд╛ рд╡рд╣рд╛рдБ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ? рдореИрдВ "3.6.0rc0" рдкрд░ рд╣реВрдВ

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ: https://github.com/LearnBoost/mongoose/issues/1377

@ рдлреНрд▓реЙрдХреЛрдирд╕ @ рд╡реЛрд╡рди 22 рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рднрд╛рдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред

рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ post.populate("comments comments._creator") рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реА рд╕рдлрд▓рддрд╛ рдорд┐рд▓реАред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд╣рди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреБрдЫ рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд░реБрдЪрд┐рдХрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

https://gist.github.com/joeytwiddle/6129653

рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рдкреИрдЪ рдереЛрдбрд╝реЗ рдмреЗрдХрд╛рд░ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рд▓рд┐рдЦрдХрд░ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ! https://github.com/LearnBoost/mongoose/pull/1603

joeytwiddle, рдореБрдЭреЗ рдареАрдХ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдареАрдХ рдХрд░ рд▓реЗрдВрдЧреЗ - рдореИрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрде рддреНрд░реБрдЯрд┐ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реИ ...

рд╣рд╛рдБ рдХреБрдЦреНрдпрд╛рдд 601ред рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдлрд┐рд▓рд╣рд╛рд▓ рдХреЗ рд▓рд┐рдПред рдирд╡реАрдирддрдо Mongoose рд░рд┐рд▓реАрдЬрд╝ рдЧрд╣рд░реА рдЖрдмрд╛рджреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди _only рдПрдХ рд╕реНрдХреАрдорд╛ рдХреЗ рднреАрддрд░_ред

рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдореЗрдВ рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдЧрд╣рд░реА рдЖрдмрд╛рджреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд▓рд┐рдЦрд╛ рд╣реИ:

https://gist.github.com/joeytwiddle/6129676

рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдХрд┐рд╕реА рднреА рдЧрд╣рд░рд╛рдИ рддрдХ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ! рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЗрд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдмреИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

deepPopulate(blogPost, "comments comments._creator comments._creator.blogposts", {sort:{title:-1}}, callback);

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП doc.constructor рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛!

_(рд╕рдирд░рд╛рдЗрдб рдФрд░ рдЬрд░реНрдорди рд╕рд░рдХрд╛рд░ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!)_

@joeytwiddle - рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЗрд╕рдиреЗ рдПрдХ рдЬрд╛рджреВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЕрдм рдореИрдВ рдЗрд╕реЗ рдПрди-рдбреАрдк рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

@aheckmann рдореИрдВ рдЗрд╕ рдкрд░ рдЖрдкрдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИред

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

рдЖрдк рдХреНрдпреЛрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдПрдХ рд╕реНрддрд░ 'рдареАрдХ' рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдирд╛ рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рд╡рд┐рд░реЛрдзреА рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ?

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдзрд╛рдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЧрд╣рд░рд╛рдИ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://github.com/buunguyen/mongoose-deep-populateред

рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

post.deepPopulate('votes.user, comments.user.followers, ...', cb);
Post.deepPopulate(posts, 'votes.user, comments.user.followers', cb);

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдкреНрд▓рдЧрдЗрди рд░реЗрдкреЛ рджреЗрдЦреЗрдВред

@buunguyen рдЕрдЪреНрдЫрд╛ рдХрд╛рдо!

рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ред

рдореЙрдбрд▓/рдорд┐рд╢рдирдкрд╛рд░реНрдЯреАрд╕рд┐рдкреЗрд╢рди.рдЬреЗрдПрд╕

var deepPopulate = require('mongoose-deep-populate');
var mongoose = require('mongoose');
var Types = mongoose.Schema.Types;

var missionParticipationSchema = new mongoose.Schema({
        user: {
            type: String,
            default: ''
        },
        mission: {
            type: Types.ObjectId,
            ref: 'Mission'
        },
        images: [{
            type: Types.ObjectId,
            ref: 'Image'
        }]
    }, {
        toJSON: {
            getters: true,
            virtuals: true
        },
        toObject: {
            getters: true,
            virtuals: true
        }
    });

    missionParticipationSchema.plugin(deepPopulate, {
        whitelist: [
            'images',
            'mission',
            'mission.images.poster',
            'mission.images.banner'
        ]
    });

var MissionParticipation = mongoose.model('MissionParticipation', missionParticipationSchema);

module.exports = MissionParticipation;

рд╕реЗрд╡рд╛рдПрдВ/рдорд┐рд╢рдирднрд╛рдЧреАрджрд╛рд░реАService.js

MissionParticipation.find({user: userID}).deepPopulate('mission.images.poster mission.images.banner').exec(function (err, missionParticipationsDocs) {
    // do the magic.
});

рдФрд░ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХрдВрд╕реЛрд▓ рдкрд░ рдорд┐рд▓рддреА рд╣реИ

TypeError: Object #<Query> has no method 'deepPopulate'

@joaom182
рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдбреАрдкрдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди http://npm.taobao.org/package/mongoose-deep-populate рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рдХреЙрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

MissionParticipation.find({user: userID}, function (err, participations) {
  MissionParticipation.deepPopulate(participations, 'mission.images.poster mission.images.banner', function(err) {
    if (err) {
      //handle it
      return void 0;
    }
    //do your magic stuff. with participations, which are populated in place in the examples 
  })
})

рд╕рд╛рджрд░

рдореБрдЭреЗ рдПрдХ рдФрд░ рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ, рдореИрдВ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред

рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ async рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

MissionParticipation.find({
   user: userID
}).populate('mission').exec(function (err, missionParticipationsDocs) {
   if (err)
      return; // handle error

   async.forEach(missionParticipationsDocs, function (mp, callback) {
      mp.mission.populate('images.poster', 'images.banner', 'prize', function (err, result) {
         callback();
      });
   }, function (err) {
      // forEach async completed
      if(err)
         return; // handle error
      resolve(missionParticipationsDocs);
   });
});

@ joaom182 рдЖрдк рдереЛрдбрд╝реЗ рддреЗрдЬрд╝ рд╣реИрдВ :)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ deepPopulate рд╕реЗ Query рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ NPM рдкрд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓рдиреЗ рдореЗрдВ рджреЗрд░реА рдХреА рддрд╛рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХреВрдВред

рдореИрдВрдиреЗ рдЕрднреА рдирдП рд╕рдВрд╕реНрдХрд░рдг (0.0.7) рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИред рддреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

MissionParticipation
  .find({user: userID})
  .deepPopulate('mission.images.poster mission.images.banner')
  .exec(cb);

@buunguyen рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!

рдХреНрдпрд╛ рдЖрдк рднрд╡рд┐рд╖реНрдп рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдиреЗрд╡рд▓рд╛-рдбреАрдк-рдкреЙрдкреНрдпреБрд▓реЗрдЯ рд░реЗрдкреЛ рдореЗрдВ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рдмрдХреЗ рдЬреАрд╡рди рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИ :)

@buunguyen рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдЬреЛ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╣реБрдИ рдФрд░ рдЖрдкрдиреЗ рдореЗрд░рд╛ рджрд┐рди рдмрдирд╛ рджрд┐рдпрд╛! рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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