Все,
Вопрос, у меня есть запрос, который фильтрует сообщения по нескольким критериям и затем возвращает эти сообщения. Затем я устанавливаю лимит, пропускаю (для нумерации страниц) и возвращаю их пользователю.
Что я пытаюсь сделать сейчас, так это реализовать нумерацию страниц, мне нужно найти общее количество документов, соответствующих приведенному выше запросу.
В принципе, если у меня есть, более 100 документов позволяют сказатьв БД, который соответствует запросу, но только возвращает 25. Мне нужно общее количество, которое соответствует запросу.
Вот мой запрос, я прочитал о агрегате, но не уверен на 100%, как его реализовать, или найду лучшее решение длявернуть общее количество документов, соответствующих моему запросу:
let regex = new RegExp(value.searchQuery, "i");
const query = Post.find();
if (value.searchQuery && value.city && value.category) {
query.where({
$and: [
{
$or: [{ title: regex }, { description: regex }]
}
],
city: value.city,
category: value.category
});
} else if (value.searchQuery && value.city && !value.category) {
query.where({
$and: [
{
$or: [{ title: regex }, { description: regex }]
}
],
city: value.city
});
} else if (value.searchQuery && value.category && !value.city) {
query.where({
$and: [
{
$or: [{ title: regex }, { description: regex }]
}
],
category: value.category
});
} else if (value.searchQuery && !value.city && !value.category) {
query.where({
$and: [
{
$or: [{ title: regex }, { description: regex }]
}
]
});
} else if (!value.searchQuery && value.city && value.category) {
query.where({ city: value.city, category: value.category });
} else if (!value.searchQuery && value.city && !value.category) {
query.where({ city: value.city });
} else if (!value.searchQuery && value.category && !value.city) {
query.where({ category: value.category });
}
if (value.sort.createdAt) {
query.setOptions({ createdAt: value.sort.createdAt });
} else if (value.sort.deadline) {
query.setOptions({ deadline: value.sort.deadline });
}
query
.setOptions({
limit: limitPerPage,
skip: skipAmount,
sort: !value.sort.createdAt
? { deadline: value.sort.deadline }
: { createdAt: value.sort.createdAt }
})
.exec();