У меня есть следующий код
var vec:ViewEntryCollection = database.getView("view").getAllEntriesByKey("Mykey",true)
как я могу сделать "vec" в случайном порядке с помощью SSJS (или java), чтобы каждый раз получать новый порядок?
У меня есть следующий код
var vec:ViewEntryCollection = database.getView("view").getAllEntriesByKey("Mykey",true)
как я могу сделать "vec" в случайном порядке с помощью SSJS (или java), чтобы каждый раз получать новый порядок?
Как насчет вторичного столбца сортировки в представлении с формулой @Unique
. Потребуется обновлять представление каждый раз, и производительность может быть не очень высокой, если представление большое.
Учитывая средний размер коллекции, я бы прокручивал коллекцию и добавлял каждый элемент в список Java или массив JavaScript.
Если вы используете Java, вы можете использовать Collections.shuffle.
Если вы используете JavaScript, вы можете использовать хорошо зарекомендовавшие себя функции/алгоритмы
Для повышения производительности НЕ храните записи коллекции в памяти. Сначала создайте список/массив UNID из вашего представления. Это будет самая медленная часть. Затем выберите любое случайное число и выберите желаемое количество UNID из списка/массива. Вызовите getDocumentByUnid или инициализируйте (скажем, 10) источников данных.
vec.getNthEntry(Math.floor(Math.random()*vec.getCount()));
в цикле, чтобы получить количество случайных записей, которые вы хотите вернуть. если вы хотите предотвратить возврат повторяющихся записей, вам, конечно, придется отслеживать уже сделанные записи (например, сохраняя принятые записи в простом объекте SSJS с индексом в качестве ключа). - person xpages-noob   schedule 04.07.2017