Как протолкнуть объект, созданный на мангусте, для заполнения другой схемы - PullRequest
0 голосов
/ 12 ноября 2019

У меня есть две модели на MongoDb, одна для пользователей, а другая для событий. Как только пользователь создал учетную запись и вошел в систему, он показывает защищенную страницу, где события могут быть добавлены в его собственный профиль. Я пытаюсь использовать populate ("events") для ссылки на схему событий, отображаемую в пользовательской схеме. А также $ push, чтобы отправить событие пользователю после его создания. Результаты: Событие создается просто отлично, но ничто не передается в массив событий в модели пользователей. Используя почтальона, чтобы увидеть пользователя, он показывает массив событий пустым, и я получаю ответ 200 с пустым объектом. Что мне здесь не хватает? Я впервые связываю схемы с MongoDb и не могу заставить их работать. Любая помощь очень ценится.

Я попытался добавить функцию обратного вызова после {new: true}, а также {safe: true, upsert: true}, но ничего не изменилось.

Здесьчасть моего кода:

Модель пользователя:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const userSchema = new Schema({
  username: { type: String, required: true },
  firstName: { type: String, required: true },
  lastName: { type: String, required: true },
  phone: { type: String },
  password: { type: String },
  email: { type: String, required: true },
  events: [{ type: Schema.Types.ObjectId, ref: "Event" }]
});

const User = mongoose.model("User", userSchema);

module.exports = User;

Модель событий:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const eventSchema = new Schema({
  title: { type: String, required: true },
  start: { type: Date, required: true },
  end: { type: Date, required: true },
  appointment: { type: String, required: true }
});

const Event = mongoose.model("Event", eventSchema);

module.exports = Event;

Маршрут для создания событий, а затем попытка отправить созданный объект наСхема пользователя:

router.post("/users/:_id", function(req, res) {
  Event.create({
    title: req.body.title,
    start: req.body.start,
    end: req.body.end,
    appointment: req.body.appointment
  })
    .then(function(dbEvent) {
      return User.findOneAndUpdate(
        { _id: req.params._id },
        {
          $push: {
            events: dbEvent._id
          }
        },
        { new: true }
      );
    })
    .then(function(dbUser) {
      res.json(dbUser);
    })
    .catch(function(err) {
      res.json(err);
    });
});

Получить одного пользователя, но он возвращает пользователя с пустым массивом для событий.

router.get("/users/:_id", (req, res) => {
  return User.findOne({
    _id: req.params._id
  })
    .populate("events")
    .then(function(dbUser) {
      if (typeof dbUser === "object") {
        res.json(dbUser);
      }
    });
});

Заранее спасибо.

1 Ответ

0 голосов
/ 13 ноября 2019

Проблема заключалась в том, что у меня были маршруты событий и маршруты пользователей в отдельных файлах, и я забыл импортировать модель User в маршруты событий: const User = require ("../../ models"). User;

...