如何只订阅数据库更新(不提取)?

时间:2015-10-22 14:56:48

标签: meteor

我有一个大型数据库,我只想将实际数据更新发送到客户端 我不希望每个客户端都获取整个数据集,因为它是由Meteor的pub / subs本地完成的。
我尝试了ground:db,但它仍然获取了所有数据。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

为实现此目的,您可以observeChanges整个收藏集,并将更改(addedchangedremoved)发送给每个publication handler

非常粗略的应用程序看起来像这样:

var pubHandlers = []

Meteor.publish('changes stream', function handlePublication() {
  pubHandlers.push(this)
  this.onStop(() =>
    pubHandlers.splice(pubHandlers.indexOf(this), 1)
  )
  this.ready()
})

myCollection.find().observeChanges({
  added : function docAdded(id, doc) {
    for(let pubHandler of pubHandlers) {
      pubHandler.added('my collection', id, doc)
    }
  },
  changed : function docChanged(id, fields) {
    for(let pubHandler of pubHandlers) {
      pubHandler.changed('my collection', id, fields)
    }
  },
  removed : function docRemoved(id) {
    for(let pubHandler of pubHandlers) {
      pubHandler.removed('my collection', id)
    }
  }
})

请注意,在这种情况下,如果客户端上没有文档,docRemoved将会抛出。 在这种情况下,您收集的所有更新都将发送给所有订阅的客户端。您可能希望使用一些智能分布式Mongo.Cursor以更清晰的方式共享负载。

答案 1 :(得分:0)

cursor.observeChanges怎么样?

http://docs.meteor.com/#/full/observe_changes