Невозможно заполнить вложенный массив

Я новичок в MongoDB и Mongoose, и я безуспешно пытаюсь заполнить вложенный массив.

У пользователей есть реквизит под названием «процедуры», который представляет собой массив объектов. Каждый элемент в этом массиве содержит некоторые реквизиты, в том числе и массив под названием «формы».

procedure[i].forms содержит ссылки на все формы в коллекции форм для разбирательства.

В «процедурах» нечего заполнять, кроме «форм». Я пытаюсь заполнить вложенный массив форм для каждого процесса.

So:

User: {
  _id: ObjectId,
  proceedings: [
    {
      _id: ObjectId,
      forms: [
        ObjectId,
        ObjectId,
        ObjectId
      ]
    },
    {
      _id: ObjectId,
      forms: [
        ObjectId,
        ObjectId,
        ObjectId
      ]
    }
  ]
}

Схемы:

const formSchema = new Schema({
  userId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  },
  values: { type: mongoose.Schema.Types.Mixed }
}, { timestamps: true });

const proceedingsSchema = new Schema({
  initial_questions: {},
  forms: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Form'
    }
  ]
});

const userSchema = new Schema({
  email: {
    type: String,
    default: '',
    unique: true
  },
  password: {
    type: String,
    default: ''
  },
  sign_up_date: {
    type: Object,
    default: moment(),
    get: parseDate
  },
  proceedings: [proceedingsSchema]
}, { timestamps: true });

userSchema.set('toObject', { getters: true });
userSchema.set('toJSON', { getters: true });

export const User = mongoose.model('Users', userSchema);
export const Form = mongoose.model('Forms', formSchema);

Запрос:

User.findOne({ _id: id })
  .populate({
    path: 'proceedings',
    populate: {
      path: 'forms',
      model: 'Form'
    }
  })
  .exec((err, user) => {
    console.log(user.proceedings[0].forms)
  })

Результатом является массив ObjectId вместо заполненных форм на их месте.

Любая помощь очень ценится.

Мангуст - v5.0.1


person R. Erickson    schedule 25.01.2018    source источник
comment
вы никогда не определяете свою модель схемы производства   -  person Danielle    schedule 26.01.2018
comment
@dprogramz Спасибо, что посмотрели. Судебные разбирательства - это просто опора на пользовательской схеме. Формы написаны тяжело, поэтому я переместил их в свою собственную коллекцию, в то время как протоколы на самом деле записываются только пару раз, а затем добавляют ссылку на другую форму.   -  person R. Erickson    schedule 26.01.2018


Ответы (1)


Подумав еще о комментарии @dprogramz, я решил перенести материалы в их собственную коллекцию. Этот запрос теперь работает:

 Proceeding.find({ userId: id })
    .populate({
      path: 'forms',
      model: 'Forms'
    })
    .exec((err, proceedings) => {
      if (err) {
        logger.error(err.message);
        return res.send({ error: err.message });
      }

      if (!proceedings) {
        return res.send({ error: 'No such proceedings' });
      }

      return res.send({ ok: { proceedings, proceedingId: proceedings[proceedings.length - 1]._id }});
    });
person R. Erickson    schedule 26.01.2018