Как поместить элементы в массив в мангусте - PullRequest
1 голос
/ 18 мая 2019

У меня есть проблема, когда я создаю пользователя и хочу сохранить некоторые элементы, связанные с этим пользователем, одновременно.

Мне удалось получить его, где я могу создать элемент и ссылаться на идентификатор_пользователя, связанный с этим элементом, но я не могу понять, как вставить все элементы, которые есть у пользователя, в схему пользователя.

Я попытался перебрать req.body.taken и добавить в пользовательскую схему, но я только что получил ноль.

router.post('/data', async (req, res) => {


  var user = new User({
    name: req.body.name,
    website: req.body.website,
  })

  user.save(function (err) {
    if (err) {
      return next(err);
    }
  })

  req.body.taken.forEach((item) => {

    var item = new Item({
      x: item.x,
      y: item.y,
      xSize: item.xSize,
      ySize: item.xSize,
      user: user,
      imageSource: item.imageSource,
      user: user
    }
    )

    item.save(function (err) {
      if (err) {
        return next(err);
      }
    })



  })

const UserSchema = new Schema(
  {
    id: Number,
    name: String,
    website: String,
    items: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Item'
      }]

  },
  { timestamps: true }
);

const ItemSchema = new Schema(
  {
    id: Number,
    x: Number,
    y: Number,
    xSize: String,
    ySize: String,
    imageSource: String,
    user: { type: mongoose.Schema.ObjectId, ref: 'User' }
  },
  { timestamps: true }
);


  User.find({})
      .populate('items')
      .exec(function(error, items) {
          console.log(items)
      })


Когда я вызываю User find, я хочу получить все элементы, связанные с этим пользователем (это будет массив, так как req.body.taken это массив элементов.

1 Ответ

1 голос
/ 18 мая 2019

Здесь есть несколько проблем.

  1. вы не ждете user.save, есть хороший шанс, что все ваши items будут сохранены до того, как пользовательский документ будет возвращен.Вы должны либо await для обещания на user.save, либо поставить цикл items.forEach в обратном вызове.также вы сохраняете весь объект, а не возвращаемый user._id, что не позволяет мангуст, так как он не соответствует схеме.создание невозможно.

  2. Вы не сохраняете массив элементов в вашем пользователе, как вы можете ожидать заполнения этого поля, если оно пустое.поток вашего кода должен немного измениться, чтобы вы могли обновить это поле.

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