流星收集正确地观察变化

时间:2016-04-14 11:08:14

标签: javascript mongodb meteor observers

早上好。 对流星收集观察有一点麻烦。

我尝试捕捉瞬间,当我的收藏被更改时(添加录音,删除......)

问题是,我的观察者"添加"函数不仅在我将文档添加到集合时调用,而且在我运行meteor项目时调用它,并且meteor系统将已有的记录添加到数据库中。 (它要求收集每个现有文件)

请帮我配置我的观察者,我只需要捕获用户的更改,而不是启动系统初始化。 也许它是在流星数据库初始化之后在服务器端初始化我的观察者的方式?

这是我的代码:

  

/app/collections/collections.js

groups = new Mongo.Collection('groups');

groups.allow({
    insert:function(){
        return true;
    },
    update:function(){
        return true;
    },
    remove:function(){
        return true;
    }
});
  

/server/observers/groups_observer.js

groups.find().observe({
added: function(document){
    console.log('groups observe added value function');
    console.log(document);
},
changed:function(new_document, old_document){
    console.log('groups observe changed value function');
},
removed:function(document){
    console.log('groups observe removed value function');
}
});

1 个答案:

答案 0 :(得分:3)

解决此问题的方法是:

  • 将created_at字段添加到文档

  • 通过created_at字段

  • 向观察者添加新文档过滤器
  

当我将文档添加到集合时:

groups.insert({
            created_by:Meteor.userId(),
            created_at: new Date(),
            .......
        });
  

新的,有效的观察者版本

var now = new Date();
groups.find({created_at : {$gt:now}}).observe({
    added: function(document){
        console.log('groups observe added value function');
        console.log(document);
    },
    changed:function(new_document, old_document){
        console.log('groups observe changed value function');
    },
    removed:function(document){
        console.log('groups observe removed value function');
    }
});

以上解决了同样的问题:cursor.observe({added}) behavior in Meteor

感谢@Francesco Pezzella的帮助)