我尝试将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对象数组
有人有想法吗?
答案 0 :(得分:1)
最好使用$addToSet
让MongoDB以原子方式为你做这件事。
voteSchema.methods.addCandidate = function addCandidate(newCandidate, callback) {
this.candidates.addToSet(newCandidate._id);
this.save(callback);
};