Порядок Рэндом - Как я могу сделать в CouchDB?

Мне нужен случайный запрос, но я не знаю то, что является лучшим способом сделать это в представлении.

7
задан Lucas Renan 9 May 2010 в 21:33
поделиться

2 ответа

Я обошелся с использованием Math.random () в моем ключе представления. Но вы должны понимать, что он будет детерминированным, поэтому вы не можете использовать его для случайности в своем приложении (только для таких вещей, как выборка данных или разделение базы данных).

8
ответ дан 6 December 2019 в 14:01
поделиться

Основная стратегия:

  1. Сохранить случайное значение в документе

     {"_id": "7a36b03f3f2899064a1db5e0a6004204", {{1 }} "random": 0.875111079382808 
    } 
     

    Вы можете вычислить random при сохранении документа или использовать функцию _update для добавления это для вас.

  2. Сделайте представление привязанным к этому значению, эффективно перемешивая их.

     {"_id": "_design / myapp", 
     "comment": "Функция оставлена ​​открытой для ясности; это должна быть строка", 
     "views": {{{1 }} "random_docs": {
     "map": function (doc) {
    if (doc.random) {
    emit (doc.random, doc); {{1 }}} 
    } 
    } 
    } 
    } 
     
  3. Выберите случайное число во время запроса, например 0.4521 и GET /db/_design/myapp/_view/random_docs?limit=1&startkey=0.4521 .

Существует вероятность (1 / total_rows), что вы выберете случайное число больше любого в представлении. Поэтому, если вам нужно быть пуленепробиваемым, вы должны повторно запустить запрос, если вы получите 0 строк.

7
ответ дан 6 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: