我有一个大型数据库,我只想将实际数据更新发送到客户端
我不希望每个客户端都获取整个数据集,因为它是由Meteor的pub / subs本地完成的。
我尝试了ground:db
,但它仍然获取了所有数据。
我怎样才能做到这一点?
答案 0 :(得分:1)
为实现此目的,您可以observeChanges
整个收藏集,并将更改(added
,changed
,removed
)发送给每个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怎么样?