Meteor听mongo db更新

时间:2015-08-12 21:12:24

标签: javascript mongodb meteor

我正在尝试用流星创建游戏。由于许多人告诉我使用mongo db(因为它是vanilla,fast和reactive)我意识到,我需要“监听”mongo db update,以便能够响应已恢复的代码并进行更改到DOM。

我可以像这样使用Meteor Trackers

var handle = Tracker.autorun(function () {
  handleEvent(
    collection.find({}, {sort: {$natural : 1}, limit: 1 }) // find last element in collection
  );
});

3 个答案:

答案 0 :(得分:1)

您要寻找的是游标的observeobserverChanges功能。见这里:http://docs.meteor.com/#/full/observe

您可以使用跟踪器,但我认为观察光标更具可扩展性。

因为在您的示例中,您似乎只对响应最后添加的对象感兴趣,所以这里有一个关于如何使用observeChanges执行此操作的框架:

var cursor = Collection.find();
cursor.observeChanges({
    added: function(id, object) {
       // This code runs when a new object "object" was added to collection.
    }
});

答案 1 :(得分:0)

cursor.observer()似乎正是我想要的。

我的解决方案如下:

collection.find({}).observe({
  addedAt: function (document, atIndex, before) {
    handleEvent(
      document
    );
  }
});

我意识到的唯一“问题”是,在测试时,似乎事件被解雇了两次。 (但是htat可能会进入另一个线程。不久之后)

(这是(我认为),因为延迟补偿,对象插入客户端数据库,然后服务器执行他的方法,然后将新集合发送到客户端,再次触发“添加”事件的位置。对吗?)

答案 2 :(得分:0)

我认为Tracker.autorun仅适用于客户端,因此您的代码可以在客户端上运行,但不能在服务器上运行。如果您想更新客户端集合,可以改为自动运行订阅。