Relationale Abfragen im Cloud-Code (parse.com)

8

Tabellenstruktur:

Collection
name (String)

Image
collection (Pointer<Collection>)
url (String)
position (Number)

Image class hat die Spalte collection , die ein Zeiger auf die Klasse Collection ist.

position wird verwendet, um Images in Collection zu sortieren.

Was wäre der effizienteste Weg in Cloud Code, um das Folgende zu erreichen?

Nehmen wir an, ich habe ~ 3000 Bilder und 3 Sammlungen.

Was wäre der beste Weg, um eine Abfrage zu erstellen, die ein Array mit allen Sammlungen zurückgibt, die mindestens ein assoziiertes Image haben und nur die ersten 5 Bilder anzeigen jeder Sammlung, sortiert nach position

Zugehörige Bilder für jede Sammlung müssten in die Antwort einbezogen werden und könnten vage wie folgt aussehen:

%Vor%

Alles, was ich mir im Moment vorstellen kann, sind zwei Abfragen, eine für alle Collections und eine andere für alle Images im Voraus und dann filtern, was ziemlich rückwärts wirkt, gepaart mit der Tatsache, dass Parse beschränkt ist um maximal 1000 Sätze zu erhalten. Muss ich meine Tabellenstruktur überdenken?

    
Robin Pyon 28.04.2015, 17:32
quelle

2 Antworten

1

Sie können dies in einem einzigen Aufruf aufgrund Ihrer Einschränkungen tun.

Wenn Sie eine kleine Anzahl von Collection -Objekten haben und eine relative Position verwenden (jede Collection hat ein Bild mit position = 1, 2 usw.), müssen Sie das Problem nicht überdenken . Diese Einschränkungen bedeuten, dass es relativ wenige Elemente gibt, bei denen "Position" & lt; 6 (oder 5, wenn 0 deine erste Indexposition ist).

Rufen Sie einfach die Klasse Image an und beschränken Sie sie auf Objekte, deren Position kleiner oder gleich 5 ist. Verwenden Sie .include() , um das Objekt Collection zurückzugeben, das an jedes Image -Objekt angehängt ist die Rückkehr. Sortieren Sie dann die Objekte Image lokal in dem Format, das Ihnen angezeigt wird.

Denken Sie daran, dass Parse die Anzahl der Objekte begrenzt, die auf 100 zurückgegeben werden können, und Sie können diese auf bis zu 1000 erhöhen. Wenn Sie .include() für Collection für jedes Image angeben, bedeutet dies, dass jedes zurückgegebene% co_de zurückgegeben wird % zählt für 2 Objekte, sodass Sie bis zu 500 Image -Objekte zurückgeben können. Klingt so, als ob das weit über Ihren Erwartungen liegt.

Voilá - ein Anruf, alle deine Objekte.

%Vor%

UPDATE Es ist auch erwähnenswert, dass dieser Ansatz sowohl für eine kleine Anzahl von Sammlungen als auch im Maßstab (1.000 oder 10.000 Sammlungen)

einen Ansatz mit "verschachtelten Abfragen" übertrifft     
Ryan Kreager 12.05.2015, 21:52
quelle
1

Mit dieser Datenstruktur haben Sie mehrere (verschachtelte) Abfragen, aber in CloudCode sollte es immer noch schnell genug sein, wenn Sie die richtigen Limits und Versprechungen verwenden.

Probieren Sie es hier aus:

%Vor%

Cloud-Code:

%Vor%

Ausgabe:

%Vor%     
picciano 11.05.2015 22:28
quelle

Tags und Links