MongoDB $lte странные результаты

Я пытаюсь реализовать (полу-) случайный результат из MongoDB; Я знаю, вопросов/ответов много, здесь, на ТАК. Но... Когда я попытался запросить MongoDB, просто для развлечения, чтобы посмотреть, что я получу, $lte выдал очень странные результаты. Рассмотрим этот набор данных:

1. 0.011224885703995824
2. 0.01718393270857632
3. 0.03377954219467938
4. 0.09617210761643946
5. 0.10130057414062321
6. 0.13116577989421785
7. 0.25664394721388817
8. 0.27124307211488485
9. 0.3029055509250611
10. 0.31508319173008204
11. 0.3163822046481073
12. 0.34581731259822845
13. 0.5077376591507345
14. 0.5806738587561995
15. 0.5997774603310972
16. 0.6492975174915045
17. 0.710568506969139
18. 0.7257499841507524
19. 0.7275129975751042
20. 0.771076871547848

хранится в поле, называемом random, и заполняется функцией rand. По этому полю есть индекс, но с 20 записями, я думаю, это не имеет значения. Но. Если я запрошу с помощью: .findOne( {'random': { $lte : 0.59 }} ), я получу результат: "случайный": 0,34581731259822845 (число 12), ожидая число 14...? Когда я попробовал еще несколько запросов, результат был очень странным. Иногда это то, чего я ожидаю, но чаще всего кажется... ну, я не знаю. Я не понимаю, как приведенный выше запрос приводит к результату, который он дает...


person Paul Wiegers    schedule 28.05.2015    source источник
comment
посмотрите этот метод find one возвращает первый документ согласно естественному порядку   -  person Yogesh    schedule 28.05.2015
comment
Конечно, но он должен возвращать документы, удовлетворяющие запросу. Возвращаемый результат не .. я чувствую. Это случайное поле не соответствует критериям?   -  person Paul Wiegers    schedule 28.05.2015
comment
0,34581731259822845 меньше 0,59, не так ли? Почему бы вам не ожидать этого?   -  person marijnz0r    schedule 28.05.2015
comment
Ну, потому что я ожидал, что 0,5806738587561995 будет первым? (В этом запросе.) Или для выполнения запроса требуется первая пришедшая на ум запись? То есть: вам нужно сначала отсортировать таблицу, а затем выбрать случайную?   -  person Paul Wiegers    schedule 28.05.2015
comment
Ах! Думаю, теперь я понял - именно это имел в виду Йогеш: findOne берет первый документ в естественном порядке, который удовлетворяет критериям! Верно. Не поняла. Это означает, что если случайное число велико, оно часто будет возвращать одно и то же число. Так что ответ Йогеша правильный - хотя он мог бы немного уточнить :-)   -  person Paul Wiegers    schedule 28.05.2015


Ответы (1)


Ах! Думаю, теперь я понял - именно это имел в виду Йогеш: findOne берет первый документ в естественном порядке, который удовлетворяет критериям! Верно. Не поняла. Это означает, что если случайное число велико, оно часто будет возвращать одно и то же число. Так что ответ Йогеша правильный - хотя он мог бы немного уточнить :-)

person Paul Wiegers    schedule 02.06.2015
comment
просто используйте find({...}).limit(1).sort({'rand':1}), но вы не получите реальных статистически случайных значений. - person evilive; 02.06.2015