我正在尝试使用cursor.observe({added})
根据插入的字段计算新字段。如果在Docs.update()
上观察,则使用added
添加的文档中断,Meteor似乎会在内爆之前停止循环。但是,changed
上的更新有效。
为什么呢?我将如何计算插入时的新字段?
见评论:
Meteor.startup(function () {
var cursor = Docs.find();
var handle = cursor.observe({
added: function (doc) {
// This breaks Meteor. Meteor gets stuck in a loop and breaks.
Docs.update(
doc._id,
{$set: {metric: getCalculatedMetric( doc.x, doc.y )}}
);
// However, this would log once as expected.
// console.log(doc.name + ' has been added.');
},
changed: function (doc, oldDoc) {
// This works as expected, updates myField.
Docs.update(
doc._id,
{$set: {metric: getCalculatedMetric( doc.x, doc.y )}}
);
}
});
});
答案 0 :(得分:1)
不确定为什么这会是一个问题,但我有一些非常类似于使用方法的工作
CollectionName.find({}).observe({
added: function(document){
Meteor.call('doSomething', {
id: document._id
});
},
changed: function(newDocument, oldDocument){
Meteor.call('doSomething', {
id: newDocument._id
});
}
});
如果这对你有用,那么删除重复的计算代码会带来额外的好处
我的方法确实使用了更细粒度的查询,但这不是问题
doSomething : function(data) {
if(!data.id)
throw new Meteor.Error(500, "Missing id!");
CollectionName.update({_id:data.id}, {$set: {
'field':value
}});
},