[MONGODB] 같은 MongoDB의 쿼리 수와 고유 한 카운트에서 그룹을 선택합니다
MONGODB같은 MongoDB의 쿼리 수와 고유 한 카운트에서 그룹을 선택합니다
내가 좋아하는 뭔가를 시도하고있다
select campaign_id,campaign_name,count(subscriber_id),count(distinct subscriber_id)
group by campaign_id,campaign_name from campaigns;
수를 제외한 결과를 제공하는이 쿼리 (별개의 subscriber_id)
db.campaigns.aggregate([
{$match: {subscriber_id: {$ne: null}}},
{$group: {
_id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"},
count: {$sum: 1}
}}
])
수를 제외한 결과를 제공하는이 다음 쿼리 (subscriber_id)
db.campaigns_logs.aggregate([
{$match : {subscriber_id: {$ne: null}}},
{$group : { _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name",subscriber_id: "$subscriber_id"}}},
{$group : { _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"},
count: {$sum: 1}
}}
])
하지만, (subscriber_id)을 계산 같은 결과에 (별개의 subscriber_id) 계산합니다
해결법
-
==============================
1.당신은 당신이 올바른 방향으로 향하고 있었다 여기에 오른쪽 라인을 따라 생각하기 시작했다. "별개의"SQL의 사고 방식을 변경하는 것은 정말 하나의 언어 달러 (A $) 그룹 작업을 작성하는 또 다른 방법입니다. 즉, 당신은 집계 파이프 라인 조건, 두 개의 파이프 라인 단계로, 여기에서 일어나고있는 두 그룹의 작업을합니다.
당신은 당신이 올바른 방향으로 향하고 있었다 여기에 오른쪽 라인을 따라 생각하기 시작했다. "별개의"SQL의 사고 방식을 변경하는 것은 정말 하나의 언어 달러 (A $) 그룹 작업을 작성하는 또 다른 방법입니다. 즉, 당신은 집계 파이프 라인 조건, 두 개의 파이프 라인 단계로, 여기에서 일어나고있는 두 그룹의 작업을합니다.
그냥 시각적으로 단순화 된 문서와 :
{ "campaign_id": "A", "campaign_name": "A", "subscriber_id": "123" }, { "campaign_id": "A", "campaign_name": "A", "subscriber_id": "123" }, { "campaign_id": "A", "campaign_name": "A", "subscriber_id": "456" }
그것은 주어진 "캠페인"조합의 총 수와 "별개"카운트가 "3"및 "2"를 각각 것을 이유로 의미합니다. 할 수있는 논리적 인 것은 "그룹이"처음 그 "subscriber_id"모든 값이 달려 있으며, 각각의 발생 수를 유지 그래서, 다음 생각 "파이프 라인은"다음 "캠페인"당 "전체"그 수는 단지 "를 계산하면서 별도의 번호와 같은 고유 한 "사건 :
db.campaigns.aggregate([ { "$match": { "subscriber_id": { "$ne": null }}}, // Count all occurrences { "$group": { "_id": { "campaign_id": "$campaign_id", "campaign_name": "$campaign_name", "subscriber_id": "$subscriber_id" }, "count": { "$sum": 1 } }}, // Sum all occurrences and count distinct { "$group": { "_id": { "campaign_id": "$_id.campaign_id", "campaign_name": "$_id.campaign_name" }, "totalCount": { "$sum": "$count" }, "distinctCount": { "$sum": 1 } }} ])
최초의 "그룹"후 출력 문서는 다음과 같이 시각화 할 수 있습니다 :
{ "_id" : { "campaign_id" : "A", "campaign_name" : "A", "subscriber_id" : "456" }, "count" : 1 } { "_id" : { "campaign_id" : "A", "campaign_name" : "A", "subscriber_id" : "123" }, "count" : 2 }
그래서 하나 개의 별개의 값과 다른 "1"에 속하는 샘플의 "세"문서 "2"에서. 이것은 여전히 최종 결과와 함께, 다음 단계에서 할 총 일치하는 문서를 얻기 위해 $ 합계로 집계 할 수 있습니다 :
{ "_id" : { "campaign_id" : "A", "campaign_name" : "A" }, "totalCount" : 3, "distinctCount" : 2 }
"|"집계 파이프 라인에 대한 정말 좋은 비유는 유닉스 파이프입니다 만약에 따라서 다음의 입력을 통해 하나 개의 명령의 출력을 통과 할 수 있도록 허용 작업자는 작업의 "체인화". 그 방법으로 처리 요구 사항 생각하기 시작하면 집계 파이프 라인 더와 작업을 이해하는 데 도움이 될 것입니다.
-
==============================
2.SQL 쿼리 : (별개의 계산 및 그룹화)
SQL 쿼리 : (별개의 계산 및 그룹화)
select city,count(distinct(emailId)) from TransactionDetails group by city;
등가 몽고의 쿼리는 다음과 같을 것이다 :
db.TransactionDetails.aggregate([ {$group:{_id:{"CITY" : "$cityName"},uniqueCount: {$addToSet: "$emailId"}}}, {$project:{"CITY":1,uniqueCustomerCount:{$size:"$uniqueCount"}} } ]);
from https://stackoverflow.com/questions/24761266/select-group-by-count-and-distinct-count-in-same-mongodb-query by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 임베디드 문서 속성을 업데이트 (0) | 2019.12.22 |
---|---|
[MONGODB] 몽고에서 샤딩 및 복제의 차이점은 무엇입니까? (0) | 2019.12.21 |
[MONGODB] 다른 컬렉션에 하나 개의 컬렉션에서 MongoDB를 이동 문서 (0) | 2019.12.21 |
[MONGODB] $ 생략하고 통합 프레임 워크에서 $ 한계 (0) | 2019.12.21 |
[MONGODB] MongoDB의에서 컬렉션을 복제 (0) | 2019.12.21 |