Проблема с .skip(num)
в mongoose заключается в том, что при добавлении данных в коллекцию, skip(num)
может вернуть данные, которые существовали в предыдущем поиске. Решение было бы пропустить из _id, но я не смог найти такой вариант.
Так что вместо:
db.collection.find().sort({ _id: -1 }).skip(num).limit(50);
Мне нравится иметь возможность:
db.collection.find().sort({ _id: -1 }).skip(_id).limit(50);
В качестве альтернативы, если я могу получить индекс _id
, то это тоже подойдет:
let res = await db.collection.findOne({_id});
let {index} = res;
db.collection.find().sort({ _id: -1 }).skip(index).limit(50);
Я использую метод Caffeinated.tech и попробовал:
const list = async function({
end_cursor = ''
} = {}) {
return await db.discovery.where('_id').gt(end_cursor).sort({ _id: -1 }).limit(50);
}
и я получил
CastError: Cast to ObjectId failed for value "" at path "_id" for model "discovery"
Правильный ответ
const list = async function(end_cursor) {
if (!end_cursor) {
return await db.discovery.where('_id').sort({ _id: -1 }).limit(50);
}
return await db.discovery.where('_id').lt(end_cursor).sort({ _id: -1 }).limit(50);
}