Как создать элемент массива модели в Mongoose - PullRequest
0 голосов
/ 06 марта 2020

У меня есть 2 коллекции, подобные этой:

const vocaSchema = {
    word: String,
    type: String,
    meaning: String,
    sente: String,
    semean: String,
    sug: String
};

const Voca = mongoose.model('Voca', vocaSchema);

const setVocaSchema = {
    lessonId: String,
    vocaList: [vocaSchema]
};

const SetVoca = mongoose.model('SetVoca', setVocaSchema);

, и теперь я хочу добавить sh новое поле Voca в vocaList, и это мой код:

app.post('/lesson/add-voca/:lessonID', (req, res) => {
    const lessonID = req.params.lessonID;

    const newVoca = new Voca({
        word: req.body.addWord,
        type: req.body.addType,
        meaning: req.body.addMeaning,
        sente: req.body.addStc,
        semean: req.body.addStcm,
        sug: req.body.addSggt
    });

    console.log(newVoca);

    SetVoca.findOneAndUpdate({ lessonId: lessonID }, { $push: { vocaList: newVoca } }, (err, result) => {
        if (!err) {
            console.log(result);
            res.redirect('/lesson/add-voca/' + lessonID);
        } else {
            console.log(result);
            res.render('error');
        }
    });
});

и результат undefined :( enter image description here
Я не знаю, как это исправить. Кто-нибудь, пожалуйста, помогите мне, большое спасибо!

1 Ответ

1 голос
/ 06 марта 2020

Вам необходимо создать sh объект, а не модель mon goose.

Также вам необходимо создать схему mon goose, используя mongoose.schema

const mongoose = require("mongoose");

const vocaSchema = new mongoose.Schema({
  word: String,
  type: String,
  meaning: String,
  sente: String,
  semean: String,
  sug: String
});

//const Voca = mongoose.model("Voca", vocaSchema);

const setVocaSchema = new mongoose.Schema({
  lessonId: String,
  vocaList: [vocaSchema]
});

const SetVoca = mongoose.model("SetVoca", setVocaSchema);

module.exports = SetVoca;

И в вашем посте маршрут:

app.post("/lesson/add-voca/:lessonID", (req, res) => {
  const lessonID = req.params.lessonID;

  const newVoca = {
    word: req.body.addWord,
    type: req.body.addType,
    meaning: req.body.addMeaning,
    sente: req.body.addStc,
    semean: req.body.addStcm,
    sug: req.body.addSggt
  };

  console.log(newVoca);

  SetVoca.findOneAndUpdate(
    { lessonId: lessonID },
    { $push: { vocaList: newVoca } },
    { new: true },
    (err, result) => {
      if (!err) {
        console.log(result);
        res.redirect("/lesson/add-voca/" + lessonID);
      } else {
        console.log(err);
        res.render("error");
      }
    }
  );
});

Тест:

Допустим, у нас есть этот документ с пустым vocaList массивом:

{
    "_id": "5e61f34358a41b7ee0e6fa40",
    "lessonId": "lesson1",
    "vocaList": [],
    "__v": 0
}

Когда мы отправляем POST-запрос с этим URL ../lesson/add-voca/lesson1 и с этим телом запроса:

    "addWord": "word1",
    "addType": "type1",
    "addMeaning": "meaning",
    "addStc": "sente",
    "addStcm": "semean",
    "addSggt": "sug"
}

Результат будет таким:

{
    "_id" : ObjectId("5e61f34358a41b7ee0e6fa40"),
    "lessonId" : "lesson1",
    "vocaList" : [
        {
            "_id" : ObjectId("5e61f5900b73daa104e2ee75"),
            "word" : "word1",
            "type" : "type1",
            "meaning" : "meaning",
            "sente" : "sente",
            "semean" : "semean",
            "sug" : "sug"
        }
    ],
    "__v" : 0
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...