流星反应发布来自不同集合的数据

Meteor reactive publish data from different collections

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

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

现在我想创建第二个名为 thing 的集合。在这个集合中,我想添加我所有的 "Things" 例如 "Roomtemperature living" 和这个东西的数据。一个属性应该是与 liveValues 之一的连接。

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

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

我如何才能将数据发布到客户端,并且当 LiveValue 已针对该事物发生变化时,我将进行反应性更新?因为它与 "Thing" 系列不同。

在我看来,我想通过订阅一份 "thing" 文档来完成此操作,我将通过此订阅返回 liveValue 集合的 liveValue 更新。

这可行吗?

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

我听说过一些关于 meteor-reactive-publish 的事情,但我不确定这是否是解决方案。我还听说这需要为服务器提供大量功能。

感谢您的帮助。

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

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

通过这个你可以观察服务器端集合的变化并发布到你的客户端聚合集合,就像这样:

// 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 集合将有来自所有传感器的数据。

希望对你有帮助。