与查询匹配的所有文档的猫鼬返回计数

时间:2019-10-23 07:56:44

标签: node.js mongodb mongoose mongodb-query mongoose-schema

全部

问题,我有一个查询,该查询根据多个条件过滤帖子,然后返回这些帖子。然后,我设置一个限制,跳过(用于分页)并将其返回给用户。

我现在要做的是实现分页,我需要查找与以上查询匹配的文档总数。

基本上,如果我有100多个文档,可以在db中说匹配查询,但只返回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 :(得分:0)

您将必须执行第二次操作才能使用query.countDocuments()

获取计数

Mongoose documentation