如何解决填充动态字段 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
使用 await。也不需要尝试/捕获。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。