Случайная запись от MongoDB

Я надеюсь получать случайную запись от огромного (100 миллионов записей) mongodb.

Каков самый быстрый и самый эффективный способ сделать так? Данные уже там и нет никакого поля, в котором я могу генерировать случайное число и получить случайную строку.

Какие-либо предложения?

304
задан Raymond Mutyaba 2 June 2019 в 08:06
поделиться

3 ответа

Это сложно, если нет данных, которые можно было бы отключить. что такое поле _id? это идентификаторы объекта mongodb? Если это так, вы можете получить максимальное и минимальное значения:

lowest = db.coll.find().sort({_id:1}).limit(1).next()._id;
highest = db.coll.find().sort({_id:-1}).limit(1).next()._id;

, тогда, если вы предполагаете, что идентификаторы распределены равномерно (но это не так, но, по крайней мере, это начало):

unsigned long long L = first_8_bytes_of(lowest)
unsigned long long H = first_8_bytes_of(highest)

V = (H - L) * random_from_0_to_1();
N = L + V;
oid = N concat random_4_bytes();

randomobj = db.coll.find({_id:{$gte:oid}}).limit(1);
6
ответ дан 23 November 2019 в 01:23
поделиться

Я бы предложил добавить случайное поле типа int к каждому объекту. Затем вы можете просто выполнить

findOne({random_field: {$gte: rand()}}) 

, чтобы выбрать случайный документ. Просто убедитесь, что вы гарантируетеIndex ({random_field: 1})

1
ответ дан 23 November 2019 в 01:23
поделиться

Выполните подсчет всех записей, сгенерируйте случайное число между 0 и подсчетом, а затем выполните:

db.yourCollection.find().limit(-1).skip(yourRandomNumber).next()
116
ответ дан 23 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

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