MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zbuduj reaktywną publikację z dodatkowymi polami w każdym dokumencie

Stosunkowo łatwo jest zachować prywatność pól, nawet jeśli są one częścią zapytania bazy danych. Ostatni argument self.added jest obiektem przekazywanym do klienta, więc możesz usunąć/zmodyfikować/usunąć pola, które wysyłasz do klienta.

Oto zmodyfikowana wersja twoich skrzypiec. To powinno zrobić to, o co prosisz. (Szczerze mówiąc nie jestem pewien, dlaczego miałeś coś powiązanego po observeChanges funkcjonować na twoich skrzypcach, więc może cię źle rozumiem, ale patrząc na resztę twojego pytania, to powinno być to. Przepraszam, jeśli się pomyliłem.)

var self = this;

// Modify the document we are sending to the client.
function filter(doc) {
  var length = doc.item.length;

  // White list the fields you want to publish.
  var docToPublish = _.pick(doc, [
      'someOtherField'
  ]);

  // Add your custom fields.
  docToPublish.itemLength = length;

  return docToPublish;                        
}

var handle = myCollection.find({}, {fields: {item:1, someOtherField:1}})
            // Use observe since it gives us the the old and new document when something is changing. 
            // If this becomes a performance issue then consider using observeChanges, 
            // but its usually a lot simpler to use observe in cases like this.
            .observe({
                added: function(doc) {
                    self.added("myCollection", doc._id, filter(doc));
                },
                changed: function(newDocument, oldDocument)
                    // When the item count is changing, send update to client.
                    if (newDocument.item.length !== oldDocument.item.length)
                        self.changed("myCollection", newDocument._id, filter(newDocument));
                },
                removed: function(doc) {
                    self.removed("myCollection", doc._id);                    
                });

self.ready();

self.onStop(function () {
  handle.stop();
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zacząć korzystać z ClusterControl

  2. dodaj pola created_at i updated_at do schematów mangusty

  3. Jak formatować liczby za pomocą przecinków w SQL?

  4. Nazwy pól FieldPath nie mogą zawierać „.” w $grupie

  5. Nie można uruchomić MongoDB. BŁĄD:adres jest już używany