मैंने विभिन्न दृष्टिकोणों की जांच की। समस्या को मामला-दर-मामला आधार पर हल किया जा सकता है, ध्यान से फ़ील्ड चुनकर और सदस्यता आदेश को ध्यान में रखते हुए, लेकिन ये समाधान कमजोर हैं और गैर-दस्तावेज मनमानी शर्तों पर भरोसा करते हैं।
एकमात्र वास्तविक, सामान्य समाधान एक आभासी संग्रह है . सबसे सरल मामला बस एक कर्सर को किसी भिन्न, क्लाइंट-साइड संग्रह नाम के तहत प्रकाशित करना है। उदाहरण के लिए:
function publishVirtual(sub, name, cursor) {
var observer = cursor.observeChanges({
added : function(id, fields) { sub.added(name, id, fields) },
changed: function(id, fields) { sub.changed(name, id, fields) },
removed: function(id) { sub.remove(name, id) }
})
sub.onStop(function() {
observer.stop() // important. Otherwise, it keeps running forever
})
}
और फिर, अपने प्रकाशन में, cursor
. लौटाने के बजाय :
var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()