Как вернуть viewEntryCollection в случайном порядке

У меня есть следующий код

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

как я могу сделать "vec" в случайном порядке с помощью SSJS (или java), чтобы каждый раз получать новый порядок?


person Thomas Adrian    schedule 04.07.2017    source источник
comment
Насколько велика коллекция?   -  person shillem    schedule 04.07.2017
comment
ну, не уверен, он может быть большим, но это маловероятно, вероятно, менее 200 записей. Если так будет проще, то будет достаточно не возвращать всю коллекцию. просто нужно вернуть, может быть, 10 записей в случайном порядке   -  person Thomas Adrian    schedule 04.07.2017
comment
Если вам нужно вернуть только небольшую часть всех записей, я не рекомендую перетасовывать/переупорядочивать всю коллекцию. Вы можете просто использовать vec.getNthEntry(Math.floor(Math.random()*vec.getCount())); в цикле, чтобы получить количество случайных записей, которые вы хотите вернуть. если вы хотите предотвратить возврат повторяющихся записей, вам, конечно, придется отслеживать уже сделанные записи (например, сохраняя принятые записи в простом объекте SSJS с индексом в качестве ключа).   -  person xpages-noob    schedule 04.07.2017
comment
Могу я спросить, какой вариант использования у этого есть?   -  person Sven Hasselbach    schedule 04.07.2017
comment
да, вы можете :-) записи - это фотографии, которые мне нужно отображать в случайном порядке   -  person Thomas Adrian    schedule 04.07.2017


Ответы (3)


Как насчет вторичного столбца сортировки в представлении с формулой @Unique. Потребуется обновлять представление каждый раз, и производительность может быть не очень высокой, если представление большое.

person Rob Mason    schedule 04.07.2017
comment
не могу изменить вид, извините - person Thomas Adrian; 04.07.2017

Учитывая средний размер коллекции, я бы прокручивал коллекцию и добавлял каждый элемент в список Java или массив JavaScript.

Если вы используете Java, вы можете использовать Collections.shuffle.

Если вы используете JavaScript, вы можете использовать хорошо зарекомендовавшие себя функции/алгоритмы

person shillem    schedule 04.07.2017

Для повышения производительности НЕ храните записи коллекции в памяти. Сначала создайте список/массив UNID из вашего представления. Это будет самая медленная часть. Затем выберите любое случайное число и выберите желаемое количество UNID из списка/массива. Вызовите getDocumentByUnid или инициализируйте (скажем, 10) источников данных.

person Frantisek Kossuth    schedule 04.07.2017