我想创建一个后端服务,监视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()
(如果我尝试,它确实会崩溃)。
问题是: 有没有办法在服务器上“订阅”收藏更新?
答案 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
}
});