我已经路由过,该路由应该基于3个输入来过滤我的文件-并且可行。
app.get("/api/getFiles", (req, res) => {
let grade = req.query.grade;
let study = req.query.study;
let subject = req.query.subject;
User.find(
{ files: { $elemMatch: { study: study, subject: subject, grade: grade } } },
(err, doc) => {
if (err) res.status(400).send(err);
res.send(doc);
}
);
});
但是,这些输入并不相互依赖。
E.G if grade = 5
函数应返回与特定等级匹配的文件,而不管其study
还是subject
。
在这种情况下,$elemMatch
中是否有任何默认值将获取所有文件,而不管它们是study
还是subject
?
答案 0 :(得分:1)
$ elemMatch没有默认值,您只需要在代码中编写自定义条件
app.get("/api/getFiles", (req, res) => {
let grade = req.query.grade;
let study = req.query.study;
let subject = req.query.subject;
if grade == 5:{
User.find(
{ files: { $elemMatch: {grade: 5 } } },
(err, doc) => {
if (err) res.status(400).send(err);
res.send(doc);
}
);}
else: {
User.find(
{ files: { $elemMatch: { study: study, subject: subject, grade: grade } } },
(err, doc) => {
if (err) res.status(400).send(err);
res.send(doc);
}
);}
});