【问题标题】:Meteor reactive publish data from different collectionsMeteor 反应式发布来自不同集合的数据
【发布时间】:2016-11-13 12:36:16
【问题描述】:

我尝试用流星构建一个家庭自动化系统。因此我想做以下事情。

我有一个集合,其中包含我从任何来源读取的所有不同的 liveValues。每个文档都是具有实际值的例如传感器的值。

现在我想创建第二个名为 thing 的集合。在这个集合中,我想添加我所有的“事物”,例如“室温生活”和这个事物的数据。一个属性应该是与 liveValues 之一的连接。

现在我想使用 Meteor the Thing 集合发布和订阅,因为在 Web 界面上,Thing 背后的 liveValue 是什么并不重要。

这里,在我的选项中,复杂的部分开始了。

如何将数据发布到客户端,并且当 LiveValue 发生变化时,我将获得响应式更新?因为它是一个不同于“Thing”集合的集合。

在我的想法中,我想通过一个订阅一个“事物”文档来做到这一点,我将通过这个订阅来更新 liveValue 集合的 liveValue。

这样可行吗?

有人知道我该如何处理吗?

我听说过meteor-reactive-publish,但我不确定这是否是解决方案。我也听说这需要大量的服务器电源。

感谢您的帮助。

【问题讨论】:

标签: mongodb meteor publish-subscribe reactive


【解决方案1】:

所以基本上你想将服务器端的文档合并到客户端的一个反应式集合中。

您应该使用 Meteor Collections 提供的observeChanges,如docs 中所述。

通过这种方式,您可以观察服务器端集合的变化并发布到客户端聚合集合,如下所示:

// Get the data from a kind of sensor
var cursor = SomeSensor.find({/* your query */});

var self = this;

// Observe the changes in the cursor and publish
// it to the 'things' collection in client
var observer = cursor.observeChanges({
  added: function (document) {
    self.added('things', document._id, document);
  },
  removed: function (document) {
    self.removed('things', document._id, document);
  },
  changed: function (document) {
    self.changed('things', document._id, document);
  }
});

// Make the publication ready
self.ready();

// Stop the observer on subscription stop
self.onStop(function () {
  observer.stop();
});

这样,things 集合将反应性地获取来自所有传感器的数据。

希望对你有帮助。

【讨论】:

  • 嗨。使用您的代码观察事物集合。但我想观察 liveValue 集合/文档。
  • 如果您看到,我观察到的光标来自 SomeSensor 集合,即您的 liveValue 集合。就像cursor = liveValue.find({})。我们正在观察liveValue 集合并将其文档推送到things 集合
  • 你觉得这个包怎么样? meteor-publish-composite。我认为这正是我正在寻找的。还是不行?
  • 我不确定,但我认为是的。该软件包正在执行我上面解释的操作。 See here
  • @PunitGupta 是的,它是 Meteor 中出版工作的核心。文档链接没有损坏的事实告诉我这是可行的。
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 2016-09-12
  • 2023-03-23
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多