如何触发AutoValue?

时间:2017-02-11 16:54:41

标签: meteor simple-schema meteor-collection2

我的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;
        }
    }
},

这是我的控制台输出的屏幕截图:

Console Logs

现在,屏幕截图看起来好像分数值已被接受为“4”。然而,问题是数据库仍然只显示“1”。

0 个答案:

没有答案