Daten von Meteor Collections abrufen

9

Ich habe ein paar Probleme, wenn ich versuche, Daten von einer Meteor-Sammlung zu bekommen, und ich brauche einen Rat.

Die Sammlung wurde erfolgreich definiert, veröffentlicht und abonniert. Wenn ich die Daten an eine Vorlage sende, zeigt sie an:

%Vor%

Aber ich versuche, die Daten vor der Anzeige zu verwenden, und hier stoße ich auf Probleme. Zuerst bekomme ich einige Inkonsistenzen zwischen find () und findOne (). find (selector) funktioniert gut und gibt einen Cursor zurück, aber findOne (selector) gibt "undefined" zurück. Ich suche wirklich nur nach 1 Eintrag, so dass find () unnötig erscheint.

Gibt LocalCollection.Cursor zurück:

%Vor%

Gibt undefined zurück:

%Vor%

Mein nächstes Problem tritt auf, wenn .fetch () auf dem LocalCollection.Cursor verwendet wird. Es gibt ein leeres Array zurück.

%Vor%

all dies gibt die folgende Zeile zurück:

[]

Wenn ich versuche, einen bestimmten Schlüssel aus dem Array anzugeben, den ich anzeigen möchte, wie:

%Vor%

Es gibt undefined zurück.

Ich mache mich immer noch mit Meteor vertraut und habe nie MongoDB (oder Minimongo) benutzt, also mache ich wahrscheinlich nur einen dummen Fehler. Wenn mir jemand darauf hinweisen könnte, wäre ich begeistert!

    
Alex Getty 18.12.2012, 20:17
quelle

5 Antworten

4

Ihre Ergebnisse für find () und findOne () sind konsistent. Im Grunde findet Mongo oder minimongo einfach kein Dokument, das dem _id entspricht. FindOne () ist genau wie eine Suche (selector, options) .fetch () [0].

Ihre Lists.Projects-Vorlage erwartet wahrscheinlich eine Sammlung, ein Array oder einen Hash, über den sie iterieren kann. Sie können kein bestimmtes Dokument zurückgeben. Wenn Sie {{#each Projects}} verwenden, müssen Sie eine Möglichkeit bereitstellen, damit die Vorlage nicht nur einen einzelnen Wert iteriert.

    
David Wihl 21.12.2012 09:19
quelle
1

Ich hatte kürzlich das gleiche Problem, Die Sammlung find () hat nichts zurückgegeben, wenn sie von query.observe verwendet wurde.

Das Problem war die Reihenfolge der subscribe der Sammlungen.

Zum Beispiel, wenn Sie eine Sammlung namens Lists und eine namens Projects ,

haben

Wenn Sie die Projekte durch Beobachtung einer Abfrage in Listen erhalten, und Sie hatten:

%Vor%

Was passiert, ist, dass der Abfrage-Observe-Trigger aufgerufen wird, aber die Projekte noch nicht vom Server abgerufen wurden. Also Projects.find (). Fetch (). Length = 0.

Um es zu beheben, tun Sie einfach

%Vor%     
Dany Y 26.06.2013 23:37
quelle
0

Wenn Sie Autopublish entfernt haben, was tun, wenn Sie die Sammlung für alle Benutzer veröffentlichen, ohne einen Veröffentlichungsnamen zu verwenden?

%Vor%

wo Sie Ihre Sammlung abonnieren?

Vorlagenhelfer

%Vor%

wie wenn wir Preis in jedem Produkt haben. Der Template-Teil sieht aus wie ...

%Vor%

der js Teil, ich werde coffeescript verwenden ...

%Vor%     
crapthings 18.12.2012 22:37
quelle
0

probiere diesen Weg

%Vor%     
kumbhanibhavesh 22.04.2017 09:29
quelle
0

Sie arbeiten am Client und Sie wissen nie, wann der Client alle benötigten Daten erhalten hat. Ihre Funktionen können ausgelöst werden, wenn die Sammlungen leer oder noch nicht fertig synchronisiert sind. Also müssen Sie eine verzögerte Anfrage an Ihren Minimongo machen (wenn alle Daten lokal verfügbar sind)

Und ja, du kannst nicht auf Sachen zugreifen, wenn sie nicht im DOM über getElementById() oder etwas gerendert werden, aber in deinem Fall versuchst du auf Daten vom Minimongo (deiner lokalen Mongodb-Version im Browser) zuzugreifen, nicht vom DOM Vorlage ist hier nicht wichtig.

Warten Sie, bis Ihre Subskription bereit ist, dass Ihr minimongo alle Daten mit dem onReady Callback in Ihrem Abonnement-Call besitzt und feuern Sie Ihre Funktionen ab.

Ссылка

  

Rückrufe (Funktion oder Objekt).

     

Optional. Kann onStop und onReady enthalten   Rückrufe. Wenn ein Fehler vorliegt, wird dieser als Argument übergeben   onStop. Wenn eine Funktion anstelle eines Objekts übergeben wird, ist dies der Fall   als onReady Callback interpretiert.

    
Dude 24.04.2017 10:23
quelle

Tags und Links