javascript - 在执行 $aggrigate $lookup 之后,如何将某些字段的过滤器添加为可选?需要进行哪些更改?
问题描述
我想按学科和年级以及其他一些领域获取数据...................... ..................................................... ..................................................... ..................................................... ..................................................
const skip = Number(page) === 1 ? 0 : Number(perPage) * (Number(page) - 1);
const limit = Number(skip) + Number(perPage);
let queryData: any = {};`enter code here`
if (grade != null) {
queryData.grade = grade;
}
if (subjects != null) {
queryData.subjects = subjects;
}
let teacherData= await this.teacherModel.aggregate([
{
$lookup: {
from: "eclasses",
localField: "_id",
foreignField: "teacher",
as: "classes"
}
},
{
$lookup: {
from: "courses",
localField: "_id",
foreignField: "teachers.id",
as:"course",
}
},
{
$project:{firstName:1, lastName:1,"classes.grade":1,"classes.subject":1,"classes.name":1,"course._id":1}
} ,
{
$match: {...queryData}
},
{
$facet: {
TeacherRecord: [{ $skip: skip }, { $limit: limit }],
metadata: [{ $count: "total" }, { $addFields: { page: page } }],
},
},
])
const totalCount = teacherData[0]?.total
const getPaginationResult = PaginationHandle.getPageCount(
page,
perPage,
totalCount
);
return [ teacherData,getPaginationResult];
}```
解决方案
推荐阅读
- javascript - 如何从 SVG 标签内控制 HTML 元素
- rust - 如何在这个结构定义中避免 PhantomData?
- solr - SolrCloud 的 SolrJ 客户端针对响应速度进行了优化?
- swift - IOS UILabel 在我重新加载应用程序或单击其他位置之前不会更新
- graphql - 来自 withApollo HOC 的 props.client.subscribe 的 API 文档
- php - 在 Laravel 通知电子邮件中添加粗体文本和换行符
- python - 从文件夹结构备份/复制 pip 模块
- javascript - 如何为 material-ui 组件正确使用 typescript 模块扩充?
- sql - 如何将varchar转换为日期格式
- python - 来自其他 python 脚本的 PyInvoke 执行任务