想象这两个嵌套的猫鼬模型,一个包含候选人列表的投票
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)
最佳答案
您是否看过猫鼬对population的支持?
例如:
Vote.find().populate('candidates').exec(callback);
将使用每个ID的完整
candidates
对象填充Candidate
数组。关于node.js - 如何递归获取 Mongoose 中附加到模型的所有对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25000935/