내 문서 구조가 (만 2 단지 아이디어를 제공) :
/* 1 */
{
"_id" : ObjectId("59edc58af33e9b5988b875fa"),
"Agent" : {
"Name" : "NomanAgent",
"Location" : "Lahore",
"AgentId" : 66,
"Suggestion" : [
"Knowledge",
"Professionalisn"
]
},
"Rating" : 2,
"Status" : "Submitted"
}
/* 2 */
{
"_id" : ObjectId("59edc58af33e9b5988b875fb"),
"Agent" : {
"Name" : "NomanAgent",
"Location" : "Lahore",
"AgentId" : 66,
"Suggestion" : [
"Knowledge",
"Clarity"
]
},
"Rating" : 1,
"Status" : "Submitted"
}
/* 3 */
{
"_id" : ObjectId("59edc58af33e9b5988b875fc"),
"Agent" : {
"Name" : "NomanAgent",
"Location" : "Lahore",
"AgentId" : 66,
"Reward" : "Thumb Up"
},
"Rating" : 5,
"Status" : "Submitted"
}
다음은 기본적으로 설문 조사 응답, 그래서 에이전트 개체를 포함 할 수 중 제안 (나쁜 고객 리뷰의 경우) 또는 보상 (행복한 고객의 경우) 여기에서 나는 제안이있는 2 건의 문서와 1 건의 보상을 보여주고 있습니다. 쿼리 위
db.getCollection('_survey.response').aggregate([
{
$group:{
_id: "$Agent.Name",
Rating: {$avg: "$Rating"},
Rewards: {$push: "$Agent.Reward"},
Status: {$push : "$Status"}
}
},
{
$unwind: "$Rewards"
},
{
$group:{
_id: {
Agent: "$_id",
Rating: "$Rating",
Rewards: "$Rewards"
},
RewardCount:{$sum: 1},
SurveyStatus: {$first: "$Status"}
}
},
{
$group:{
_id: "$_id.Agent",
Rewards: {$push:{Reward: "$_id.Rewards", Count: "$RewardCount"}},
Rating: {$first: "$_id.Rating"},
SurveyStatus: {$first: "$SurveyStatus"}
}
},
{
$unwind: "$SurveyStatus"
},
{
$group:{
_id: {
Agent: "$_id",
Survey: "$SurveyStatus"
},
StatusCount:{$sum : 1},
Rating: {$first: "$Rating"},
Rewards: {$first: "$Rewards"}
}
},
{
$group:{
_id: "$_id.Agent",
Status:{$push:{Status: "$_id.Survey", Count: "$StatusCount"}},
Rewards: {$first: "$Rewards"},
Rating: {$first: "$Rating"}
}
},
{
$project:{
_id: 0,
Agent: "$_id",
Rating: {
$multiply:[
{$divide:["$Rating",5]},
100
]
},
Status: 1,
Rewards: 1
}
}
]);
가 보상에 완벽하게 잘 작동
나는 아래에 주어진 보상에 대한 쿼리를 만든은, 내가 제안 정확히 같은 일을 원하고 그것의, 가능하면 나는 행복 할 것 동일한 검색어에서 추천 검색어 조정 (추천 검색어를 별도로 만들 수도 있음) 위의 주어진 쿼리의
응답 :
/* 1 */
{
"Status" : [
{
"Status" : "Submitted",
"Count" : 2.0
},
{
"Status" : "Pending",
"Count" : 1.0
},
{
"Status" : "Opened",
"Count" : 2.0
}
],
"Rewards" : [
{
"Reward" : "Thumb Up",
"Count" : 1.0
},
{
"Reward" : "Thank You",
"Count" : 2.0
}
],
"Agent" : "GhazanferAgent",
"Rating" : 68.0
}
/* 2 */
{
"Status" : [
{
"Status" : "Opened",
"Count" : 2.0
},
{
"Status" : "Viewed",
"Count" : 2.0
},
{
"Status" : "Pending",
"Count" : 3.0
}
],
"Rewards" : [
{
"Reward" : "Gift",
"Count" : 1.0
},
{
"Reward" : "Thumb Up",
"Count" : 3.0
},
{
"Reward" : "Thank You",
"Count" : 1.0
}
],
"Agent" : "NomanAgent",
"Rating" : 60.0
}
지금까지 시도, 나는 두 가지 방법을 생각하지만, 그들 각각의 문제를 찾을 무엇
먼저 (평균 등급을 찾아 배열의 푸시 상태 및 제안) :
db.getCollection("_survey.response").aggregate([
{
$match:
{
$and:[
{
"Agent.Suggestion":{
$exists: true
}
},
{
Rating: {$lte: 3}
}
]
}
},
{
$group:{
_id: {
AgentName: "$Agent.Name",
AgentId: "$Agent.AgentId",
Location: "$Agent.Location"
},
Rating: {$avg: "$Rating"},
Status: {$push : "$Status"},
Suggestions: {$push: "$Agent.Suggestion"}
}
}
]);
문제는이 아프로에 직면 ach는 프로젝션의 제안 사항이 상담원이 고객 응답에서 제안을 얻는 횟수에 따라 동적 크기의 배열 배열 (처음에는 배열이었습니다)이 될 것입니다. 따라서 문제는 동적 크기가 2 차원 배열 인에 $ unwind를 적용하는 것입니다.
둘째,이 방식을 사용
db.getCollection("_survey.response").aggregate([
{
$match:
{
$and:[
{
"Agent.Suggestion":{
$exists: true
}
},
{
Rating: {$lte: 3}
}
]
}
},
{
$unwind: "$Agent.Suggestion"
},
{
$group: {
_id:{
AgentName: "$Agent.Name",
AgentId: "$Agent.AgentId",
Suggestion: "$Agent.Suggestion",
Location: "$Agent.Location"
},
Status: {$push: "$Status"},
Rating: {$avg: "$Rating"},
Count: {$sum: 1}
}
}
]);
문제점 $이고 ($ 그와 같은 1 단 제안 긴장 1 차원 어레이 동적 크기의 2 차원 배열의 문제를 긴장 $을 피하기 위해) 제안 배열을 풀면 해당 에이전트와의 모든 제안이 병합되므로 (원래 응답과 비교하여) 문서 수가 증가하므로 이 그룹화를 기준으로 각 상담원의 평균 등급에 대한 올바른 값을 찾을 수 없습니다 에이 상태가 동일하게 발생할 것입니다. 왜냐하면 내가 에이전트로 그룹화 할 때만이 두 필드를 올바르게 찾을 수 있기 때문입니다. 여기에 제안과 함께 에이전트와 그룹화 중입니다.,
내가 제안 검색어에 대해 정확히 동일한 응답을 원할 경우 응답의 보상 객체 만 제안을 대체합니다 (또는 제안 객체를받을 수 있다면 좋을 것입니다. 동일한 응답)
조사 상태 할 수있는 일, 오픈, 볼, 제출 등 계류중인
출력 설명 : 내가 원하는
카운트와 제안() %의 형태로 개수와 상태() 및 평가 (나는 이미하고있다) 당신이 출력에서 볼 수있는 것처럼 각 에이전트에 대해 위에 언급했듯이.
미리 감사드립니다.
, 첫 번째 방법을 사용하여, 두 번 연속 나를 위해 속임수를 썼는지 긴장을 풀고. 제안에 대해 똑같이하는 것을 멈추게하는 것은 무엇입니까? –
Rewards는 단순히 키 값 쌍입니다. 제안은 배열입니다.이 배열은 내가 붙어있는 곳이며, 제안의 데이터를 평평하게하기 위해 풀면 평점 (프로젝트 단계에서 % 형식으로 계산 됨)이 엉망입니다. –
내가 틀렸을 수도 있습니다. 나는이 제안을 몇 가지 방법으로 변환하려고합니다. –