sql >> Databasteknik >  >> NoSQL >> MongoDB

Meteor:publicera 2 olika projektioner av arrayelement

Jag undersökte olika tillvägagångssätt. Problemet kan lösas från fall till fall genom att noggrant välja fält och ta hänsyn till prenumerationsordningen, men dessa lösningar är tunniga och förlitar sig på icke-dokumenterade godtyckliga förhållanden.

Den enda riktiga, generiska lösningen är en virtuell samling . Det enklaste fallet är helt enkelt att publicera en markör under ett annat samlingsnamn på klientsidan. Till exempel:

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

Och sedan, i din publikation, istället för att returnera en cursor :

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



  1. Hur man grupperar efter flera kolumner och flera värden i mongodb

  2. MongoDB update()

  3. Hur såddar du relationer för Mongoid i Ruby on Rails?

  4. Kan inte POST i nodejs och mongodb på openshift