Mongoose возвращает счетчик всех документов, соответствующих запросу - PullRequest
0 голосов
/ 23 октября 2019

Все,

Вопрос, у меня есть запрос, который фильтрует сообщения по нескольким критериям и затем возвращает эти сообщения. Затем я устанавливаю лимит, пропускаю (для нумерации страниц) и возвращаю их пользователю.

Что я пытаюсь сделать сейчас, так это реализовать нумерацию страниц, мне нужно найти общее количество документов, соответствующих приведенному выше запросу.

В принципе, если у меня есть, более 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();

1 Ответ

0 голосов
/ 24 октября 2019

Вам нужно будет выполнить вторую операцию, чтобы получить счет, используя query.countDocuments()

Документация Mongoose

...