рдЕрд░реЗ,
рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреАрдорд╛ рд╣реИрдВ (рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓реАрдХреГрдд)
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = рдирдИ рд╕реНрдХреАрдорд╛
рд▓реЙрдЧрд┐рди: рд╕реНрдЯреНрд░рд┐рдВрдЧ
рдП = рдирдИ рд╕реНрдХреАрдорд╛
рдПрдВрдм: [рдмреА]
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ: [рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ]
// рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдореНрдмреЗрдбреЗрдб рд╕реНрдХреАрдорд╛
рдмреА = рдирдИ рд╕реНрдХреАрдорд╛
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ: [рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ]
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ = рдирдИ рд╕реНрдХреАрдорд╛
рд░рдЪрдирд╛рдХрд╛рд░:
рдЯрд╛рдЗрдк рдХрд░реЗрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА
рд╕рдВрджрд░реНрдн: 'рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛'
рд╕рдВрджреЗрд╢: рд╕реНрдЯреНрд░рд┐рдВрдЧ
рдЕрдм рдЬрдмрдХрд┐ рдкреЙрдкреНрдпреБрд▓реЗрдЯ A . рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЬреИрд╕реЗ A.find().populate('comments.creator')
рдпрд╣ рдбрдмрд▓ рдиреЗрд╕реНрдЯреЗрдб рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЬреИрд╕реЗ A.find().populate('emb.comments.creator')
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрддрд░реЛрдВ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред
рд╣рд╛рдп рдПрдирдХреЛ,
рдЖрдк рдпрд╣ рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдЬрдм рдЖрдк рдЕрдкрдиреА рдкрд╣рд▓реА рдЖрдмрд╛рджреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рдЖрдЗрдЯрдо рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЙрдирдХреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЖрдмрд╛рджреА рд╡рд╛рд▓реЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ? рдЬрдм рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрднреА рдЪрд┐рдкрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдХреБрдЫ рдХреЛрдб рдХрдорд╛рд▓ рдХрд╛ рд╣реЛрдЧрд╛ред
рдзрдиреНрдпрд╡рд╛рдж,
рдкреЙрд▓
@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) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╣рдо рдЕрдм рдЙрд╕ рдкрде рд╕реЗ рдорд╛рди рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ (рддреНрд░реБрдЯрд┐ рдЕрдорд╛рдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рд╣реИ рдЬрдм рдкреИрд░реЗрдВрдЯ.рдЪрд╛рдЗрд▓реНрдб рдпрд╛ рдкреЗрд░реЗрдВрдЯ.рдЪрд╛рдЗрд▓реНрдб.рдЧреНрд░реИрдВрдбрдЪрд╛рдЗрд▓реНрдб рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реЛ)ред
рд╕рдВрдмрдВрдзрд┐рдд: http://stackoverflow.com/questions/11137239/querying-nested-embedded-documents-with-mongoose
@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://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 рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдЬреЛ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╣реБрдИ рдФрд░ рдЖрдкрдиреЗ рдореЗрд░рд╛ рджрд┐рди рдмрдирд╛ рджрд┐рдпрд╛! рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдзрд╛рдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЧрд╣рд░рд╛рдИ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://github.com/buunguyen/mongoose-deep-populateред
рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдкреНрд▓рдЧрдЗрди рд░реЗрдкреЛ рджреЗрдЦреЗрдВред