0

我正在尝试cursor.observe({added})根据插入的字段来计算新字段。如果观察 on ,使用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 )}}
      );
    }
  });
});
4

1 回答 1

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
        }});
},
于 2013-04-12T13:10:49.137 回答