我在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