Как ограничить значение поля в документе по значению из документов в другой коллекции?

Есть документ, у него есть поле template – нужно что бы это поле могло принимать только те значения, которые указаны в документах другой коллекции. ПО смыслу это звучит так - есть коллекции с шаблонами, есть коллекции с ресурсами, у ресурсов есть поле в котором указывается какой шаблон у этого ресурса и он должно быть из списка созданных шаблонов в соответствующей коллекции. Пробую это сделать через валидацию поля

let schema = new mongoose.Schema({
  template: {
    type: String,
    validate: async (name)=>{
      return new Promise(async (resolve, reject)=>{
        const tplModel = model('Template');
        const tpl = await tplModel.findOne({name})
        if(!tpl){
          return reject(false)
        }
        return resolve(true)
      })
    }
  }
})

В валидаторе я делаю запрос в другую коллекцию, ищу, есть ли там документ с таким именем, как было передано. Но как только я делаю асинхронный запрос в другую коллекцию, этот запрос “зависает”. Подскажите пожалуйста, как можно реализовать подобный функционал?


Ответы (0 шт):