У меня есть две коллекции, первая -
коллекция user_profile
const userProfileSchema = mongoose.Schema({
phone_number: {
type: String,
required: false,
},
primary_skills: [
{
skill_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Skill'
},
years: Number,
}
]
});
образец данных
{
"phone_number":"222",
"primary_skills":[{skill_id:1,years:12},{skill_id:2,years:13}]
}
в primary_skills
ключ skill_id
сопоставлен с другой коллекцией с именем навыки
набор навыков
const skillSchema = mongoose.Schema({
name: {
type: String,
required: true,
unique:true,
},
});
образец данных
[
{
id:1,
name:'php'
},
{
id:2,
name:'java'
}
]
Я хочу получить все значения в коллекции user_profile
вместе с соответствующим skills
именем
ожидаемым результатом:
{
"phone_number":"222",
"primary_skills":[{
name:"php",skill_id:1,years:12
},{
name:"java",skill_id:2,years:13}
]
}
Я нашел похожую ветку на свой вопрос Поиск MongoDB, когда внешнее поле массив объектов , но он выполняет противоположное тому, что я хочу
Это тот запрос, который я пробовал
profile.aggregate([{
$lookup:{
from:'skills',
localField:'primary_skills.skill_id',
foreignField:'_id',
'as':'primary_skills'
}
}])
Он отлично работает, но не содержит years
ключ