Mongoose return 匹配查询的所有文档的计数
Mongoose return count of all documents that match query
所有,
问题,我有一个查询,它根据几个条件过滤帖子,然后 returns 这些帖子。然后我设置一个限制,跳过(用于分页)并将它们 return 给用户。
我现在要做的是实现分页,我需要的是找到与上述查询匹配的文档总数。
基本上,如果我有,100 多个文档可以在数据库中说匹配查询,但只有 returning 25。我需要匹配查询的总数。
这是我的查询,我阅读了聚合但不确定 100% 如何实现它,或者找到更好的解决方案来解决 return 与我的查询匹配的文档总数:
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();
您必须执行第二个操作才能使用 query.countDocuments()
获取计数
所有,
问题,我有一个查询,它根据几个条件过滤帖子,然后 returns 这些帖子。然后我设置一个限制,跳过(用于分页)并将它们 return 给用户。
我现在要做的是实现分页,我需要的是找到与上述查询匹配的文档总数。
基本上,如果我有,100 多个文档可以在数据库中说匹配查询,但只有 returning 25。我需要匹配查询的总数。
这是我的查询,我阅读了聚合但不确定 100% 如何实现它,或者找到更好的解决方案来解决 return 与我的查询匹配的文档总数:
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();
您必须执行第二个操作才能使用 query.countDocuments()