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

    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/

10-11 07:34