我在mongodb中使用$或查询遇到了小问题,我有一个具有以下模式的文档的集合。它有一个角色和skill_set键,每个角色都有一些相关的技能组合。
[
{
"skill_set" : [
{
"skill_name" : "Project Planning"
},
{
"skill_name" : "Delivery Management"
},
{
"skill_name" : "Resource Management"
},
{
"skill_name" : "Stakeholder Management"
},
{
"skill_name" : "Agile Project Management"
},
{
"skill_name" : "Change Management"
}
],
"role" : "Project Manager"
},
{
"skill_set" : [
{
"skill_name" : "Project Planning"
},
{
"skill_name" : "Delivery Management"
},
{
"skill_name" : "Resource Management"
},
{
"skill_name" : "Stakeholder Management"
},
{
"skill_name" : "Agile Project Management"
},
{
"skill_name" : "Change Management"
},
{
"skill_name" : "Financial Management"
},
{
"skill_name" : "Sales, Marketing and Customer Service "
},
{
"skill_name" : "Strategic Input"
}
],
"role" : "Sr Project Manager"
},
{
"skill_set" : [
{
"skill_name" : "Project Planning"
},
{
"skill_name" : "Delivery Management"
},
{
"skill_name" : "Resource Management"
},
{
"skill_name" : "Stakeholder Management"
},
{
"skill_name" : "Agile Project Management"
},
{
"skill_name" : "Change Management"
},
{
"skill_name" : "Financial Management"
},
{
"skill_name" : "Sales, Marketing and Customer Service "
},
{
"skill_name" : "Strategic Input"
}
],
"role" : "Delivery Manager"
},
{
"skill_set" : [
{
"skill_name" : "Test Planning"
},
{
"skill_name" : "Technlogy Expertise"
},
{
"skill_name" : "Team Player"
},
{
"skill_name" : "Communication"
},
{
"skill_name" : "Design and Architecture"
},
{
"skill_name" : "Requirement Understanding"
},
{
"skill_name" : "Task Management"
}
],
"role" : "Tester"
}
]
我想搜索与作用匹配skill_set文件,这些文件我能够使用查询获取。
{"$or":[{"skill_set.skill_name":"Project Planning"},{"skill_set.skill_name":"Strategic Input"},{"skill_set.skill_name":"Delivery Management"}]},{"_id":0}
输出,用于查询
[
{
"skill_set" : [
{
"skill_name" : "Project Planning"
},
{
"skill_name" : "Delivery Management"
},
{
"skill_name" : "Resource Management"
},
{
"skill_name" : "Stakeholder Management"
},
{
"skill_name" : "Agile Project Management"
},
{
"skill_name" : "Change Management"
}
],
"role" : "Project Manager"
},
{
"skill_set" : [
{
"skill_name" : "Project Planning"
},
{
"skill_name" : "Delivery Management"
},
{
"skill_name" : "Resource Management"
},
{
"skill_name" : "Stakeholder Management"
},
{
"skill_name" : "Agile Project Management"
},
{
"skill_name" : "Change Management"
},
{
"skill_name" : "Financial Management"
},
{
"skill_name" : "Sales, Marketing and Customer Service "
},
{
"skill_name" : "Strategic Input"
}
],
"role" : "Sr Project Manager"
},
{
"skill_set" : [
{
"skill_name" : "Project Planning"
},
{
"skill_name" : "Delivery Management"
},
{
"skill_name" : "Resource Management"
},
{
"skill_name" : "Stakeholder Management"
},
{
"skill_name" : "Agile Project Management"
},
{
"skill_name" : "Change Management"
},
{
"skill_name" : "Financial Management"
},
{
"skill_name" : "Sales, Marketing and Customer Service "
},
{
"skill_name" : "Strategic Input"
}
],
"role" : "Delivery Manager"
}
]
在输出是清晰可见,3超过4个角色被取出。除此之外,我希望技能组匹配角色.ie。
在给定的查询我在寻找项目规划或交付管理或战略投入角色,我想为角色项目经理skill_match_count = 2已经2比赛在他的技能组合,即我想要的东西象下面。
[
{
"role" : "Project Manager",
"skill_match_count" : 2
},
{
"role" : "Sr Project Manager",
"skill_match_count" : 3
},
{
"role" : "Delivery Manager",
"skill_match_count" : 3
}
]
示例输出与示例文档不匹配。例如,“项目经理”有6项技能,在你的输出中显示2.所以是错误的?我真的不明白你在计算什么。 – TomG
@tom此计数仅用于匹配技能,即针对来自给定上述查询匹配的“项目管理员”角色2技能。我希望我清楚我的问题。 –
我想你可以通过使用mongo'aggregation'功能来处理它。请尝试一下。 – gzc