【发布时间】:2020-03-27 22:16:10
【问题描述】:
下面是一个虚构的语法,我希望它可用,这样我就可以使用 . 我有一个课程集合,每门课程都有一个会话数组作为子文档 我想根据我的用户在搜索时查询参数来获取课程,这样如果有人要求特定老师的课程,我会在我的 $match 阶段使用它,如果不只是找到所有老师的所有课程,同样适用于主题和状态,如果它们被定义,则使用它们,如果不忽略它们并找到所有可能的。
如果在 mongo 或聚合中有一个关键字我可以使用并且它知道它可以找到所有类似 * 或正则表达式语法的东西,那么还有另一个过程
我也遇到了 $cond 关键字,但在这里与我的期望不符。
app.get('/sessions',(req, res)=>{
const teacher = req.query.teacherId
const subject = req.query.subjectId
const status = req.query.statusId
Course.aggregate([
if(teacher) {$match:{teacher:teacher}},
if(subject) {$match:{subject:subject}},
if(status) {$match:{status:status}}
]).then(sessions=>res.json(sessions))
.catch(err=>res.json(err))
})
不确定这是否有帮助,但这是我的课程架构
const CourseSchema = new mongoose.Schema({
name:{type:String,required:true},
status:{type:String,required:true},
subject:{
type:mongoose.Schema.Types.ObjectId,
ref :'subjects'
},
teacher:{
type:mongoose.Schema.Types.ObjectId,
ref :'users'
},
sessions:[
{
Date:{type:Date,required:true},
timeStart:{type:String,required:true},
timeEnd :{type:String,required:true},
students :[{
type:mongoose.Schema.Types.ObjectId,
ref :'users'
}]
}
]
})
提前谢谢你。
【问题讨论】:
标签: node.js mongodb express mongoose aggregation-framework