【问题标题】:search queries in nodejs and mongodb and populated data在 nodejs 和 mongodb 中搜索查询并填充数据
【发布时间】:2023-03-27 07:56:01
【问题描述】:

我有一个用 nodejs 和 mongodb 编写的网络应用程序,我有以下两个模型

   var TeacherSchema = new Schema({
       school_id:[{type: Schema.Types.ObjectId, ref: 'School'}],
       name: String,
       subjects: [{type: Schema.Types.ObjectId, ref: 'Subject'}],
       });


 var SubjectSchema = new Schema({
     title : String,
     school_id:[{type: Schema.Types.ObjectId, ref: 'School'}]
     });

我写了一个 api,搜索会抛出老师或科目

 router.get("/field-teacher-subject", function (req, res) {
var   school_id= req.query.schoolId;
Subject.find(school_id:'school_id,function (err, subjects) {
    if (err) {
        console.log(err);
        res.json({status: "error", message: err.message});
    } else {
        var sub_array=[];
        for(var q in subjects){
            sub_array.push(subjects[q]._id);
        }
        Teacher.find({subjects:{$in :sub_array }},{first_name:true, father_name:true, last_name : true, subjects:true}).populate('subjects')
            .exec(function(tech) {
                console.log("hello: ");
                var subjeto = [];
                if(tech){
                    for(var p in tech){
                        subjeto.push(tech[p].subjects);
                    }
                }
                res.json({status: "success", message: "subjects returned", 
            items: tech});
            }).catch(function(err){
                if(err){
                    res.json({status:"error",
                      message:"error occurred"+err.message});
                    return;
                }
            });
    }
}).limit(parseInt(req.query.max));
});

当我搜索一个名字时,这个返回 null, 解决这个问题的最佳方法是什么

【问题讨论】:

  • 在哪里搜索名字?我在这里看不到任何试图匹配名称的东西。哪个名字?老师的名字?不是很清楚你在问什么。
  • 教师姓名或科目名称

标签: node.js mongodb mongoose


【解决方案1】:

很难知道您在问什么,但您的代码几乎没有错误。让我们清理你的代码,好吗?

router.get("/field-teacher-subject", function (req, res) {
    // get subjects
    Subject
        .find({ school_id: req.query.schoolId })    // 1st argument is an object
        .limit(parseInt(req.query.max))             // should go before 
        .exec(function (err, subjects) {            // use .exec()
            if (err) {
                console.log(err);
                return res.json({ status: "error", message: err.message });
            }
            // get subject IDs
            var sub_array = subjects.map(function (subject) { return subject._id; });
            // get teachers assigned to subjects
            Teacher
                .find({ subjects: { $in: sub_array }})
                .select('first_name father_name last_name subjects')
                .populate('subjects')
                .exec(function(err, teachers) {     // 1st argument is an error
                    if (err) {
                        console.log(err);
                        return res.json({status: "error", message: err.message });
                    }
                    var subjeto = teachers.map(function (teacher) { return teacher.subjects; });

                    res.json({status: "success", message: "subjects returned", items: teachers  });
                });
    });
});

有用的链接:

  • 请参阅doc 中的第三个示例,了解如何使用.limit() 和.exec()。

  • .map()

  • 您尝试在第二个查询中使用 .exec(),例如 .then() 和 .catch()

【讨论】:

    猜你喜欢
    • 2017-12-23
    • 2022-09-30
    • 1970-01-01
    • 2014-04-10
    • 2018-12-05
    • 2022-10-05
    • 2012-11-29
    • 2013-11-03
    • 2021-03-03
    相关资源
    最近更新 更多