我收集了一些锻炼-每个锻炼都有对WorkoutCategoryId的引用。但是,API不仅应该返回categoryId,还应该返回整个类别。因此,我需要以某种方式从WorkoutCategoryId中查找WorkoutCategory,并进行填充。
现在,我正在查找与客户相关的所有锻炼:
let workouts = await Workout.find({
clientId: clientId
});
if(workouts) {
return workouts
}
太好了,所有这些都可以正常工作,但是正如我所写的,这将返回一个锻炼数组:
0: {_
id: "5efc518032844e24c74371ec", name: "A name2", createdBy: "5ee75b17558756773c2dd4b1",…}
clientId: "5ef08f6b25fbdc481b01a82b"
createdBy: "5ee75b17558756773c2dd4b1"
workoutCategoryId: "5ee75b17558756773c2dd4b9"
name: "A name2"
},
1: {_
id: "5efc518032844e24c74371ec", name: "A name2", createdBy: "5ee75b17558756773c2dd4b1",…}
clientId: "5ef08f6b25fbdc481b01a82b"
createdBy: "5ee75b17558756773c2dd4b1"
workoutCategoryId: "5ee75b17558756773c2dd4b9"
name: "A name2"
}
所以我的问题是,我应该如何扩展它,以便在我回答的每个项目中也获得实际的trainingCategory?
我在锻炼中尝试使用.map(),并尝试扩展对象,但无法完全正常工作...
workouts = workouts.map((workout) => {
let workoutCategoryId = workout.workoutCategoryId;
WorkoutCategory.find({_id: workoutCategoryId}).then((category) => {
workout.category = category
});
return workout;
})
我看过一些关于有人建议使用$ lookup的.aggregate()的文章,但是我不能完全包住头,并且有点卡住:(
答案 0 :(得分:0)
使用填充。假设“ workoutCategoryId”存储了引用WorkoutCategory模型的objectId。
Workout.find({
clientId: clientId
})
.populate('workoutCategoryId')
.exec(function(err, workout){
})
使用查找。试试这个。
Workout.aggregate([
{
$match: {clientId: clientId}
},
{
$lookup: {from: "WorkoutCategory", localField: "workoutCategoryId", foreignField: "_id", as: "workoutCategory"}
}
], (err, w) => {
console.log(w)
})
在“ w”中,它将存储为executionCategory(数组)。