如何为以ObjectID为字段的猫鼬模式实现findOrCreate?

时间:2020-03-22 10:23:43

标签: node.js mongodb express asynchronous

我正在创建一个MERN应用程序,并试图编写一个findOrCreate函数,该函数将Schema,搜索字段和其他用于创建的字段作为输入。使用此findOrCreate函数,我想创建条目,这些条目将用作后续对另一个Schema的findOrCreate调用的字段。这是我到目前为止的代码:

    findOrCreate = async (Schema, findFields, additionalCreateFields, cb) => {
      await Schema.findOne(findFields, async (err, docs) => {
        if (err) {
          console.log(err)
          return cb(err);
        }

        if (docs) {
          // docs found, Return
          console.log("Found Existing")
          return cb(err, docs);
        } else {
          // no docs found, create
          console.log("Creating New")
          docs = await Schema.create({
            ...findFields,
            ...additionalCreateFields
          });

          return cb(err, docs)
        }
      })
    }

    router.post('/create/', async(req, res, next) => {
      try {
        let course, classroom;

        await findOrCreate(Course, {
          department: req.body.courseDept,
          code: req.body.courseCode,
        }, {
          name: req.body.courseName
        }, (err, docs) => {
          if (err)
            console.log(err);
          else {
            course =  docs;
          }
        });

        await findOrCreate(Classroom, {
          course: course,
          professor: req.body.professorName,
        }, {
          link: req.body.course_link
        }, (err, docs) => {
          if (err)
            console.log(err);

          else {
            classroom = docs;

            return docs;

          }
        });
        res.status(200).json(classroom);
      } catch (e) {
        error.log(e);
        res.status(500).json({});
      }
    });

我尝试使用第一个findOrCreate调用的返回值初始化course变量,但结果始终为undefined。 我当前使用的方法非常慢,并且使用10秒钟以上的时间将响应返回给服务器,并且经常超时。我该如何解决?

0 个答案:

没有答案