如何递归地获取连接到mongoose中的模型的所有对象

时间:2014-07-28 17:34:28

标签: node.js mongoose nested

想象一下这两个嵌套的猫鼬模型,投票包含候选人

列表
    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

1 个答案:

答案 0 :(得分:1)

您是否看过Mongoose对population的支持?

例如:

Vote.find().populate('candidates').exec(callback);

将使用每个id的完整candidates对象填充Candidate数组。