MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Meteor:2 verschiedene Projektionen von Array-Elementen veröffentlichen

Ich habe verschiedene Ansätze untersucht. Das Problem kann von Fall zu Fall gelöst werden, indem Felder sorgfältig ausgewählt und die Abonnementreihenfolge beachtet werden, aber diese Lösungen sind schwach und beruhen auf nicht dokumentierten willkürlichen Bedingungen.

Die einzige echte, generische Lösung ist eine virtuelle Sammlung . Der einfachste Fall besteht darin, einfach einen Cursor unter einem anderen clientseitigen Sammlungsnamen zu veröffentlichen. Zum Beispiel:

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
  })
}

Und dann, in Ihrer Publikation, anstatt einen cursor zurückzugeben :

var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()