2017-12-27 2 views
0

나는 컬렉션 게시물을 만들었고 이와 같이 보이는 문서를 추가했습니다.Mongo DB - 그룹 상태 및 집계를 사용하여 총 개수 얻기

내가 계산됩니다 집계 함수를 사용할 필요가
[{ 
    "title" : "MongoDB-Overview", 
    "status" : "created", 
    "postBy" : "sukesh" 
}, { 
    "title" : "MongoDB-Collection", 
    "status" : "created", 
    "postBy" : "sukesh" 
}, { 
    "title" : "MongoDB-Document", 
    "status" : "approved", 
    "postBy" : "sukesh" 
}, { 
    "title" : "MongoDB-Database", 
    "status" : "approved_pending", 
    "postBy" : "ramesh" 
}, { 
    "title" : "MongoDB-Query", 
    "status" : "deleted", 
    "postBy" : "suresh" 
}] 

,
1. 총 게시물은 특정 사람 (여기에만 sukesh)에 할당하고, (2) 총 상태의 카운트 상태가 다음 할당 할 경우
, 그것은 것입니다 다음과 같이
을 반환하십시오.

{ 
    "postby": "sukesh" 
    "totalPost": 4, 
    "status": { 
     "created": 2 
     "approved": 1, 
     "approved_pending": 0, 
     "deleted": 1 
    }  
} 

해결 방법을 알려주십시오.

답변

0

나는이 당신이 원하는대로 정확하게 가능하다고 생각하지 않지만, 당신이 사용할 수있는 경우에 당신은 시도 할 수 있습니다 :

db.collection.aggregate([ 
{ 
    $group: { 
    _id: "$postBy", 
    count: { $sum: 1}, 
    status: { $push: "$status"} 
    } 
}, 
{ $unwind: "$status"}, 
{ 
    $group: { 
    _id: { "postby": "$_id", status: "$status" }, 
    scount: { $sum: 1}, 
    count: {$first: "$count"} 
    } 
}, 
{$group: { 
     _id: "$_id.postby", 
     total: {$first: "$count"}, 
     status: {$push: { type: "$_id.status", count: "$scount" }}, 
}}, 
{ 
    $project: { 
    _id: 0, 
    postby: "$_id", 
    totalPost: "$total", 
    status: 1 
    } 
} 
]) 
+0

완벽한 집계 기능을 작성하고 신속하게 응답 해 주신 Alex에게 감사 드리며 나의 하루를 보냈습니다. –

+0

문제가없는 친구! –

0

당신은 집계 아래로 사용할 수 있습니다.

$group by status 및 postBy 및 각 postBy에 대한 개수 상태 다음에 $group을 입력하여 상태 및 집계 배열을 만들고 푸시하여 총 상태 수를 얻습니다.

db.collection_name.aggregate([ 
{"$group":{ 
    "_id":{"postBy":"$postBy","status":"$status"}, 
    "count":{"$sum":1} 
}}, 
{"$group":{ 
    "_id":"$_id.postBy","totalPost":{"$sum":"$count"}, 
    "status":{"$push":{"status":"$_id.status","count":"$count"}} 
}}])