【发布时间】:2020-11-25 17:52:30
【问题描述】:
我有两个收藏第一个是
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 与另一个名为skills 的集合映射
技能集合
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 lookup when foreign field is an array of objects 类似的线程,但它与我想要的相反
这是我试过的查询
profile.aggregate([{
$lookup:{
from:'skills',
localField:'primary_skills.skill_id',
foreignField:'_id',
'as':'primary_skills'
}
}])
这很好用,但它不包含years 键
【问题讨论】:
标签: mongodb aggregation-framework