2016-07-22 9 views
0

Ich habe eine Frage zu Sammlungen - insbesondere möchte ich eine große Sammlung auf einem Server haben, und laden nur kleine Teile davon ein Stück nach dem anderen, in einer unvorhersehbaren Reihenfolge , wo ich jederzeit aufhören möchte, eine lokale Kopie eines gegebenen Stückes zu haben. Soll ich für jedes Datenelement ein neues Abonnement erstellen und es dann stoppen, wenn ich dieses Datenelement nicht mehr möchte? Oder sollte ich eine andere Methode verwenden? Oder sollte ich nur große Teile davon laden, die ich nicht benutzen werde und sie in meiner lokalen Kopie der Sammlung herumliegen lassen?Loading kleine Stücke von Daten mit vielen Abonnements in Meteor

Edit: Oder sollte ich ein Abonnement mit einer Liste der IDs für jedes Stück von Daten, die ich will, und haben die Veröffentlichungsfunktion spezifisch finden, dass jeder von denen? Scheint kompliziert, aber es hält mich nur mit einem Abonnement zu beschäftigen.

Edit: Oder vielleicht sollte ich nur die Verwendung von Publikationen und Abonnements überspringen und nur Methoden verwenden, um meine Daten an den Client zu übergeben? Verliert eine Menge Funktionalität und erfordert einige zusätzliche Arbeit, aber es vermeidet die meisten Probleme und sollte für meine Zwecke gut funktionieren.

Antwort

0

Angenommen Mongo collection = "Artikel" { Name: 'item1', Typ: 'basic', Menge: 40 }

Sie definieren Sammlungen auf der Meteor-Server mit

Items= new Mongo.Collection('items') 

1.Diese Sammlungen enthalten alle Daten aus den MongoDB-Sammlungen, und Sie können Items.find ({...}) auf ihnen ausführen, die einen Cursor (eine Reihe von Datensätzen mit Methoden zum Iterieren zurückgeben sie a nd sie zurückgeben).

Meteor.publish('itemOver30', function itemPublication() { 
return(Items.find({qty:{gte:10},{name:1,qty:1})); 
}); 

Dieser kehrt Cursor auf alle Datensätze mit Teil Stück über 30 in Artikel Sammlung (Teilmenge der gesamten Datensätze, nicht ganz Sammlung).

2.Cursor wird verwendet, um eine Reihe von Datensätzen zu veröffentlichen (senden) ("Datensatzsatz" genannt). Sie können optional nur einige Felder aus diesen Datensätzen veröffentlichen. Es sind Datensätze (nicht Sammlungen), die Clients abonnieren.

Meteor.subscribe('itemOver30'); 
  1. auf dem Client haben Sie Minimongo Sammlungen, die teilweise einige der Datensätze vom Server spiegeln. "Teilweise", weil sie nur einige der Felder enthalten können, und "einige der Datensätze", weil Sie normalerweise nur die benötigten Datensätze an den Client senden müssen, um das Laden der Seite zu beschleunigen, und nur die, die es benötigt und über die Berechtigung verfügt Zugriff.
+0

Ich weiß, wie Abonnements und Publikationen funktionieren, meine Frage ist, wie ich sie verwenden sollte. Ich möchte Elemente einzeln laden und sie dann einzeln löschen. Soll ich ein einzelnes Abonnement mit einer Liste der relevanten IDs verwenden oder für jedes ein neues Abonnement erstellen oder ganz auf Abonnements überspringen und Methoden verwenden oder etwas anderes tun? – Angle

+0

Bitte geben Sie ein Beispiel oder einen Code an und teilen Sie uns mit, was Sie erreichen möchten – AGdev

+0

Entschuldigung, dass ich so lange gebraucht habe, um Ihnen zu antworten, ich habe Ihren Kommentar nicht bemerkt. Als Antwort formuliere ich ein Forum, in dem jeder Beitrag als Antwort auf eine beliebige Anzahl anderer Beiträge und als Antwort darauf eine beliebige Anzahl anderer Beiträge enthalten kann und Benutzer einzelne Beiträge in beliebiger Reihenfolge dynamisch laden und schließen können. – Angle

Verwandte Themen