在mongoose中如何迭代ObjectId数组?

时间:2014-07-27 07:43:15

标签: javascript node.js mongoose

我尝试将javascript对象重构为mongoose对象。 我有两个简单的模型:

候选模特:

var candidateSchema = new Schema({
    name: String,
    score: { type: Number, default: 0, min: -2, max: 2 }
});

candidateSchema.methods.updateScore = function updateScore(newScore) {
    this.score = newScore;
};

投票型号,其中包含候选人名单:

var voteSchema = new Schema({
    candidates: [
        { type: Schema.Types.ObjectId, ref: 'Candidate' }
    ]
});

function candidateAlreadyExists(candidates, newCandidate) {
    var alreadyExists = false;
    candidates.forEach(function (candidate) {
        if (newCandidate.name === candidate.name) {
            alreadyExists = true;
        }
    });
    return alreadyExists;
}

voteSchema.methods.addCandidate = function addCandidate(newCandidate, callback) {
    var candidates = this.candidates;

    if (!candidateAlreadyExists(candidates, newCandidate)) {

        candidates.push(newCandidate);
    }
    this.save(callback);
};

我尝试在我的voteSchema中添加一个静态方法来添加一个新的候选者,只要它不存在。

我无法迭代我的候选人(candidates.forEach(function (candidate) {),因为它是一个_ids数组而不是一个javascript对象数组

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

最好使用$addToSet让MongoDB以原子方式为你做这件事。

voteSchema.methods.addCandidate = function addCandidate(newCandidate, callback) {
    this.candidates.addToSet(newCandidate._id);
    this.save(callback);
};