2016-11-13 51 views
0

我尝试用流星建立一个家庭自动化系统。因此我想做以下事情。流星被动地发布来自不同收藏的数据

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

现在我想创建第二个集合叫做东西。在这个集合中,我想添加所有的“事物”例如“Roomtemperature living”与这个东西的数据。一个属性应该是与一个liveValues的连接。

现在我想发布和订阅流星的事集合,因为在web界面上并不重要什么liveValue背后的事情。

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

如何将数据发布到客户端,当LiveValue发生更改时,我将有一个被动更新?因为它与“Thing”系列不同。

在我的想法中,我想通过一个subscrition来做到这一点的“事情”文件,我会回来与这个订阅liveValue集合的liveValue的更新。

这可行吗?

有人想法我怎么能处理这个?

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

感谢您的帮助。

+0

你看过[reywood:publish-composite](https://atmospherejs.com/reywood/publish-composite)包吗?这将是一个相当标准的用例。 –

回答

0

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

您应该按照docs中所述使用流星集提供的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集合将有来自被动所有传感器数据。

希望它可以帮助你。

+0

嗨。使用您的代码o观察Thing系列。但我想观察liveValue集合/文档。 – Michael

+0

如果您看到,我正在观察的光标来自'SomeSensor'集合,即您的liveValue集合。 这就像'cursor = liveValue.find({})'。我们正在观察'liveValue'集合并将它的文档推送到'东西'集合中被动地收集 – tbking

+0

您对这个软件包有什么看法? [流星发布复合](https://github.com/englue/meteor-publish-composite)。我认为这正是我正在寻找的。或不? – Michael