Как мне реализовать findOrCreate для моей схемы mon goose, в которой в качестве поля указан ObjectID? - PullRequest
0 голосов
/ 22 марта 2020

Я создаю приложение MERN и пытаюсь написать функцию findOrCreate, которая принимает в качестве входных данных схему, поля поиска и дополнительные поля для создания. Используя эту функцию findOrCreate, я хочу создать записи, которые будут служить полями для последующего вызова 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 секунд, чтобы вернуть ответ серверу, и он часто истекает. Как мне это исправить?

...