Meteor.subscribe在服务器端

时间:2016-01-18 10:32:14

标签: mongodb meteor

我想创建一个后端服务,监视mongodb集合的新条目。正在创建这些,我希望运行处理并更新它们。 我认为使用Meteor服务/应用程序这样做是明智之举,因为Meteor使用'oplog tailing',这似乎是出于此目的的理想选择(如果可能,我宁愿避免轮询)。

因此,我认为创建一个最小的服务器端应用程序应该解决它。 所以基本上,我需要这些方面的东西:

if (Meteor.isServer) {
    MyCollection = new Mongo.Collection('myCollection');
    Meteor.publish('myCollectionPub', function () {
         return MyCollection.find({ some: criteria... });
    }
    // is there such a thing?
    Meteor.serverSideSubscribe('MyCollectionPub', 
        function (newDocs) {
            // process/update newDocs
    });
}

根据the Meteor docs,我无法在服务器上使用Meteor.subscribe()(如果我尝试,它确实会崩溃)。

问题是: 有没有办法在服务器上“订阅”收藏更新?

2 个答案:

答案 0 :(得分:2)

PeerLibrary server-autorun package(以及它的依赖,reactive-mongo)将为您提供简单的服务器端集合观察。

答案 1 :(得分:2)

@tarmes建议的替代方法是collection-hooks包,但正如David Weldon所指出的那样,它只会在以下情况下触发:

https://github.com/matb33/meteor-collection-hooks

MyCollection.after.insert(function (userId, doc) {
    // ...
});

如果你需要它运行,即使另一个实例在mongo数据库中进行了更改,你可以观察从你的集合中返回的游标:

MyCollection.find({created_at : {$gt: some_current_time}}).observe({
    added: function(item) {
        // Alert code
    }
});