sql >> Database >  >> NoSQL >> MongoDB

Meteor:publiceer 2 verschillende projecties van array-elementen

Ik heb verschillende benaderingen onderzocht. Het probleem kan van geval tot geval worden opgelost door zorgvuldig velden te kiezen en de abonnementsvolgorde te volgen, maar deze oplossingen zijn dun en berusten op niet-gedocumenteerde willekeurige voorwaarden.

De enige echte, generieke oplossing is een virtuele verzameling . Het eenvoudigste geval is simpelweg een cursor publiceren onder een andere verzamelingsnaam aan de clientzijde. Bijvoorbeeld:

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

En dan, in uw publicatie, in plaats van een cursor . terug te sturen :

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



  1. Hoe pijplijn in node.js naar redis?

  2. Zoeken met jokertekens in MongoDB uitvoeren met Java

  3. Cast to Number mislukt voor waarde NaN (typenummer) bij pad op een berekend veld Mongoose

  4. Extraheer Decimaal uit Decimal128 met Mongoose - MongoDB