Мне потребовалось немного времени, чтобы понять, потому что я обернул свой внутренний ul в собственный тег li, а не в тег li, к которому был прикреплен мой внутренний ul. Если вы обернете свой внутренний ul в собственный тег li, вы получите дополнительную ненужную пулю.
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>item 3</li>
<li>Item 4</li>
<li>Item 5 has sub items:
<ul>
<li>Sub Item 1</li>
<li>Sub Item 2</li>
</ul>
</li>
<li>Item 6</li>
<li>Item 7</li>
</ul>
Этот подход подобен для Приближения к 2 упомянутым в [1 115] этот ответ . Тот Подход 2 случайных числа использования дважды (однажды в самом документе и однажды в процессе выбора документа). Этот Подход 2b будет только использовать случайные числа на выборе, обрабатывают и используют последовательные целые числа на документах. Обратите внимание, что это не будет работать, если документы будут удалены (см. ниже). Вот то, как это работает:
Добавляют последовательные целые числа к Вашим документам во время создания:
{
_id: "4f12782c39474fd0a498126c0400708c",
int_id : 0,
// actual data...
}
другой документ
{
_id: "a498126c0400708c4f12782c39474fd0",
int_id : 1,
// actual data...
}
и просто подсчитывают одним с каждым документом.
представление random
имеет ту же функцию карты (хотя Вы могли бы хотеть изменить ее имя на что-то другое, чем "случайный"):
function(doc) {
if (doc.int_id) {
emit(doc.int_id, doc);
}
}
Это шаги для загрузки случайного документа:
N
в представлении путем вызова: http://localhost:5984/db/_design/d/_view/random
0 <= r < 1
i = floor(r*N)
http://localhost:5984/db/_design/d/_view/random?startkey=i&limit=1
Этот путь мы выбрали ровное распределение int_id
от [1 110] до [1 111] дизайном. Затем мы выбираем случайный индекс (между 0 и N-1) и используем его на этом даже распределение.
Этот подход не работает больше, когда документы в середине или вначале удалены. Эти int_id
должен запуститься в [1 113] и подойти N-1
.