Mongoose 返回匹配查询的所有文档的计数
Posted
技术标签:
【中文标题】Mongoose 返回匹配查询的所有文档的计数【英文标题】:Mongoose return count of all documents that match query 【发布时间】:2020-02-19 10:07:36 【问题描述】:全部,
问题,我有一个查询,它根据几个条件过滤帖子,然后返回这些帖子。然后我设置一个限制,跳过(用于分页)并将它们返回给用户。
我现在要做的是实现分页,我需要的是找到与上述查询匹配的总文档数。
基本上,如果我有,可以在 db 中说 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】:您必须执行第二次操作才能使用 query.countDocuments()
获取计数
Mongoose documentation
【讨论】:
count() 已被弃用,对吗? countDocuments() 是要使用的。但是您将如何执行此操作?我的意思是我应该如何通过所有过滤器,例如包含在 query.where(...) 您可以添加新变量countQuery
就像这样 const query = Post.find(); const countQuery = query; if (value.searchQuery && value.city && value.category) query.where( . . . ); countQuery.where( . . . ).count();
这应该会给您计数。以上是关于Mongoose 返回匹配查询的所有文档的计数的主要内容,如果未能解决你的问题,请参考以下文章
在 Mongoose/MongoDB 的文档中过滤数组、子文档、数组、文档