2017-07-04 4 views
0

Ich habe den folgenden CodeWie ein viewEntryCollection in zufälliger Reihenfolge zurückzukehren

var vec:ViewEntryCollection = database.getView("view").getAllEntriesByKey("Mykey",true) 

wie kann ich „VEC“ in zufälliger Reihenfolge mit SSJS (oder Java), so dass ich eine neue Ordnung jedes Mal bekommen?

+0

Wie groß ist die Sammlung? – shillem

+0

gut, nicht sicher, es könnte groß sein, aber das ist nicht wahrscheinlich, wahrscheinlich unter 200 Einträge. Wenn es einfacher wird, würde es ausreichen, nicht die gesamte Sammlung zurückzugeben. müssen nur vielleicht 10 Einträge in zufälliger Reihenfolge zurückgeben –

+2

Wenn Sie nur einen kleinen Bruchteil aller Einträge zurückgeben müssen, dann empfehle ich nicht, die gesamte Sammlung zu mischen/neu anzuordnen. Sie könnten einfach 'vec.getNthEntry (Math.floor (Math.random() * vec.getCount()));' in einer Schleife verwenden, um die Anzahl der zufälligen Einträge zu erhalten, die Sie zurückgeben möchten. Wenn Sie verhindern möchten, dass doppelte Einträge zurückgegeben werden, müssen Sie natürlich bereits getätigte Einträge verfolgen (z. B. indem Sie die aufgenommenen Einträge in einem einfachen SSJS-Objekt mit dem Index als Schlüssel speichern). –

Antwort

2

Wie wäre es mit einer sekundären Sortierspalte in der Ansicht mit einer Formel von @Unique. Müsste die Ansicht jedes Mal aktualisieren und die Leistung ist möglicherweise nicht groß, wenn die Ansicht groß ist.

+0

kann die Ansicht nicht ändern, sorry –

1

Für eine bessere Leistung, keine Sammlung Einträge im Speicher halten. Machen Sie zuerst eine Liste/ein Array von UNIDs aus Ihrer Sicht. Das wird der langsamste Teil sein. Wählen Sie dann eine beliebige Zahl und wählen Sie die gewünschte Anzahl von UNIDs aus der Liste/Array. Rufen Sie getDocumentByUnid auf oder initialisieren Sie (sagen wir 10) Datenquellen.

Verwandte Themen