填充动态字段猫鼬
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.
我正在尝试创建一个动态函数来获取字段数组、过滤器对象和模式模型,并填充数组中的字段。
例如: 而不是像这样填充-
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.