想象一下这两个嵌套的猫鼬模型,投票包含候选人
列表 var candidateSchema = new Schema({
name: String
});
var voteSchema = new Schema({
candidates: [{ type: Schema.Types.ObjectId, ref: 'Candidate' }]
});
voteSchema.methods.addCandidate = function addCandidate(newCandidate, callback) {
this.candidates.addToSet(newCandidate);
this.save(callback);
};
var Vote = mongoose.model('Vote', voteSchema);
var vote = new Vote();
var Candidate = mongoose.model('Candidate', candidateSchema);
var candidate = new Candidate({ name: 'Guillaume Vincent' });
vote.addCandidate(candidate);
console.log(vote); // { _id: 53d613fdadfd08d9ebea6f88, candidates: [ 53d68476fc78cb55f5d91c17] }
console.log(vote.toJSON()); // { _id: 53d613fdadfd08d9ebea6f88, candidates: [ 53d68476fc78cb55f5d91c17] }
如果我使用candidates: [candidateSchema]
代替candidates: [{ type: Schema.Types.ObjectId, ref: 'Candidate' }]
,则显示console.log(vote);
:
{
_id: 53d613fdadfd08d9ebea6f88,
candidates: [ { _id: 53d613fdadfd08d9ebea6f86, name: 'Guillaume Vincent' } ]
}
我的问题是:
使用candidates: [{ type: Schema.Types.ObjectId, ref: 'Candidate' }]
如何以递归方式获取附加到模型的所有对象?与candidates: [candidateSchema]
我没有使用嵌入式架构,因为我希望在更新候选人时更新我的投票(请参阅https://stackoverflow.com/a/14418739/866886)
答案 0 :(得分:1)
您是否看过Mongoose对population的支持?
例如:
Vote.find().populate('candidates').exec(callback);
将使用每个id的完整candidates
对象填充Candidate
数组。