填充动态字段猫鼬

Populate Dynamic Fields Mongoose

我正在尝试创建一个动态函数来获取字段数组、过滤器对象和模式模型,并填充数组中的字段。

例如: 而不是像这样填充-

getCardByName=(Model,filter)=>{ 
         return new Promise((resolve, reject) => {
             Model.findOne(filter).populate({ path: "user" })
                 .populate({ path: "socialMedia" })
                 .populate({ path: 'galleryList' })
                 .populate({ path: 'reviewsList' })
                 .populate({ path: 'lead' })
                 .populate({ path: 'statistic', })
                 .exec(async(err, card) => {
                     if (err) {
                         reject(err);
                     }
                     resolve(card)
                 })
       });
}

我想创建一个像这样的动态函数:

 //assume arr is a function argument
    arr=["user", "socialMedia", "galleryList", "reviewsList", "lead", "statistic"]
    let populateStr=""
        arr.forEach(path => {
            populateStr+=`.populate({path: ${path}})`
        });
        console.log(populateStr)
        return new Promise(async(resolve, reject)=>{
            try{
              await Model.findOne(filter).populateStr
              .exec(async(err,card)=>{
                  if(err)
                  {
                      reject(err)
                      resolve(card)
                  }
              })

              }
        catch(err){
    console.log(err)
    }
    })

当我 运行 这段代码时,我得到了人口字符串,但人口本身并没有真正发生。

(类型错误:无法读取未定义的 属性 'exec')

你有没有想过这样做或修复我写的代码?

谢谢!

你可以这样做

var query = Model.findOne(filter);

arr.forEach(path => {
    query.populate(path);
});

query.exec(async (err, card) => {
    if (err)
        reject(err)
    else 
        resolve(card)
});

当您在 exec 回调函数中使用 resolve/reject 时,没有理由为 Model.findOne 使用等待。也不需要 try/catch.