我的Collection中有两个autovalue字段。我写了一个Cronjob,每半个小时循环一次我的收藏品。基本上我想触发/刷新这些项目的自动值而不更新任何其他字段。
我尝试使用
MyCollection.simpleSchema().clean {
extendAutoValueContext: {
id: myCollection._id
}
});
我在返回计算值之前就看到了autovalue字段的所有控制台日志。唯一的问题是,一个值的字段值不会改变。我在日志中看到它,但在数据库上它保持不变。
刷新AutoValue字段的正确方法是什么,而不必更新其他字段?
修改:似乎清洁导致第二个自动转回第一个。
我该如何解决这个问题?
编辑2:这是我的代码:
score: {
type: Number,
autoValue: function(doc) {
if (this.isInsert) {
return 0;
}
else {
var maxValue = 0;
Collections.Comments.find({ debateId: this.docId }).map(function(mapDoc){
maxValue += mapDoc.votes;
});
console.log("Updated debate "+this.docId+" score to "+maxValue);
console.log("debate score autovalue: "+JSON.stringify(doc, null, 4));
return maxValue;
}
}
},
rank: {
type: Number,
decimal:true,
optional: true,
autoValue: function(doc){
if(this.isInsert){
return 0;
}
else {
var newRank= someCalc();
console.log("Updated debate "+this.docId+" rank to "+newRank+", score: "+s);
console.log("debate rank autovalue: "+JSON.stringify(doc, null, 4));
console.log("---------------------------");
return newRank;
}
}
},
这是我的控制台输出的屏幕截图:
现在,屏幕截图看起来好像分数值已被接受为“4”。然而,问题是数据库仍然只显示“1”。