Мне нужен случайный запрос, но я не знаю то, что является лучшим способом сделать это в представлении.
Я обошелся с использованием Math.random () в моем ключе представления. Но вы должны понимать, что он будет детерминированным, поэтому вы не можете использовать его для случайности в своем приложении (только для таких вещей, как выборка данных или разделение базы данных).
Основная стратегия:
Сохранить случайное значение в документе
{"_id": "7a36b03f3f2899064a1db5e0a6004204", {{1 }} "random": 0.875111079382808
}
Вы можете вычислить random
при сохранении документа или использовать функцию _update
для добавления это для вас.
Сделайте представление привязанным к этому значению, эффективно перемешивая их.
{"_id": "_design / myapp",
"comment": "Функция оставлена открытой для ясности; это должна быть строка",
"views": {{{1 }} "random_docs": {
"map": function (doc) {
if (doc.random) {
emit (doc.random, doc); {{1 }}}
}
}
}
}
Выберите случайное число во время запроса, например 0.4521 и GET /db/_design/myapp/_view/random_docs?limit=1&startkey=0.4521
.
Существует вероятность (1 / total_rows), что вы выберете случайное число больше любого в представлении. Поэтому, если вам нужно быть пуленепробиваемым, вы должны повторно запустить запрос, если вы получите 0 строк.