разбиение на страницы в mongodb, чтобы избежать skip() и limit()

109
12

Я новичок в nodejs, я хочу искать в больших данных, как я могу искать документ без использования skip() и limit(), моя структура базы данных

{
"_id" : ObjectId("5a9d1836d2596d624873c84f"),
"updatedAt" : ISODate("2018-03-05T10:13:10.248Z"),
"createdAt" : ISODate("2018-03-05T10:13:10.248Z"),
"phone" : "+92333333",
"country_code" : "+92",
"verified_user" : false,
"verification_code" : "2951",
"last_shared_loc_time" : ISODate("2018-03-05T10:13:10.240Z"),
"share_loc_flag_time" : ISODate("2018-03-05T10:13:10.240Z"),
"share_location" : true,
"deactivate_user" : false,
"profile_photo_url" : null,
"__v" : 0
}

как я могу искать, используя createdAt. Мне нужен запрос mongodb, который запрашивает api и показывает, что пользователи

спросил(а) 2018-03-09T16:09:00+03:00 2 года, 8 месяцев назад
1
Решение
93

Использование skip() не рекомендуется, если у нас есть большие данные в MongoDB, потому что всегда требует сервера идти от начала коллекции, вы можете использовать _id индекс с limit(), чтобы сделать нумерацию страниц, потому что _id поле индексируется по умолчанию в MongoDB поэтому вы можете использовать это поле для хорошей производительности.

Для первой страницы вам нужно получить значение _id последнего документа с помощью limit():

db.users.find().limit(8);

last_id = id;

Во-вторых, для следующей страницы сравните это последнее значение _id со следующим _id:

 db.users.find({'_id' > last_id}).limit(8);

Например, если предположить, что первый _id равен 1000 так:

                1000 < 1008  ==> PAGE 1 where last_id=1008
1008 < 1016 ==> PAGE 2 where last_id=1016
1016 < 1024 ==> PAGE 3 where last_id=1024

ответил(а) 2018-03-09T16:43:00+03:00 2 года, 8 месяцев назад
42

{
uid : 1,
name: 'abc'
...
}
{
uid : 2,
name: 'abc'
...
}
....
{
uid : 10,
name: 'abc'
...
}
{
uid : 11,
name: 'abc'
...
}

Теперь вы можете запросить, как получить данные, где uid > 0 и uid <5


то в следующем слоте он получает данные, где uid > 5 и uid <10 как мудрый...

Может быть, это одобрение может помочь вам

ответил(а) 2018-03-09T16:22:00+03:00 2 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема