[MONGODB] 몽고 집계 : $ 그룹과 계산에 대한 객체 $ 프로젝트 배열
MONGODB몽고 집계 : $ 그룹과 계산에 대한 객체 $ 프로젝트 배열
내가 좋아하는 문서가 :
{
"platform":"android",
"install_date":20151029
}
많은 분야가있다.
목표 : 나는 특정 날짜에 플랫폼 별 설치 횟수를 계산하고 있습니다.
나는 플랫폼 통합 프레임 워크와 메이크업 카운트에 의해 그룹을 사용하고 그래서. 문서는 같은과 같아야합니다 :
{
"install_date":20151029,
"platform" : {
"android":1000,
"ios": 2000,
"facebook":1500
}
}
나는 같은 짓을 :
db.collection.aggregate([
{
$group: {
_id: { platform: "$platform",install_date:"$install_date"},
count: { "$sum": 1 }
}
},
{
$group: {
_id: { install_date:"$_id.install_date"},
platform: { $push : {platform :"$_id.platform", count:"$count" } }
}
},
{
$project : { _id: 0, install_date: "$_id.install_date", platform: 1 }
}
])
이는 같은 문서를 제공합니다 :
{
"platform": [
{
"platform": "facebook",
"count": 1500
},
{
"platform": "ios",
"count": 2000
},
{
"platform": "android",
"count": 1000
}
],
"install_date": 20151027
}
문제:
"플랫폼"으로 단일 개체로 배열을 투사
해결법
-
==============================
1.MongoDB를 3.4 및 최신으로, 당신은 원하는 결과를 얻을 $ arrayToObject 연산자의 사용을 활용할 수 있습니다. 다음과 같은 집계 파이프 라인을 실행해야합니다 :
MongoDB를 3.4 및 최신으로, 당신은 원하는 결과를 얻을 $ arrayToObject 연산자의 사용을 활용할 수 있습니다. 다음과 같은 집계 파이프 라인을 실행해야합니다 :
db.collection.aggregate([ { "$group": { "_id": { "date": "$install_date", "platform": { "$toLower": "$platform" } }, "count": { "$sum": 1 } } }, { "$group": { "_id": "$_id.date", "counts": { "$push": { "k": "$_id.platform", "v": "$count" } } } }, { "$addFields": { "install_date": "$_id", "platform": { "$arrayToObject": "$counts" } } }, { "$project": { "counts": 0, "_id": 0 } } ])
이전 버전의 경우, 플랫폼 필드 값을 기준으로 카운트를 평가하는 $ 그룹 파이프 라인 단계에서 $ 콘드 연산자를 활용, 다음과 같은 :
db.collection.aggregate([ { "$group": { "_id": "$install_date", "android_count": { "$sum": { "$cond": [ { "$eq": [ "$platform", "android" ] }, 1, 0 ] } }, "ios_count": { "$sum": { "$cond": [ { "$eq": [ "$platform", "ios" ] }, 1, 0 ] } }, "facebook_count": { "$sum": { "$cond": [ { "$eq": [ "$platform", "facebook" ] }, 1, 0 ] } }, "kindle_count": { "$sum": { "$cond": [ { "$eq": [ "$platform", "kindle" ] }, 1, 0 ] } } } }, { "$project": { "_id": 0, "install_date": "$_id", "platform": { "android": "$android_count", "ios": "$ios_count", "facebook": "$facebook_count", "kindle": "$kindle_count" } } } ])
이 첫 번째 인수 (있는 경우)를 그리고 그 평가가 true (다음)는 두 번째 인수 나 세 번째 인수 거짓 (다른)를 반환으로 위에서 $ 콘드는 논리적 조건을합니다. 이는 1과 0으로 참 / 거짓 수익률은 각각 $ 합에 공급 할 수 있습니다.
{ "$ EQ": [ "$ 플랫폼", "페이스 북은"]} 경우에 따라서 예를 들어, : 그것은 {0 $ 합} 될 것입니다 다른, 사실 그 표현은 {1 $ 합}로 평가됩니다
from https://stackoverflow.com/questions/33413294/mongo-aggregation-group-and-project-array-to-object-for-counts by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 쿼리는 배열의 특정 위치에 항목을 기준으로 (0) | 2019.12.20 |
---|---|
[MONGODB] 하나의 호출로 여러 MongoDB의 문서를 작성하고 업데이트 (0) | 2019.12.20 |
[MONGODB] 집계 작동하지 _id 사용하여 찾기 [중복] (0) | 2019.12.20 |
[MONGODB] Golang는 빈 객체를 받고 MGO (0) | 2019.12.20 |
[MONGODB] 어떻게 클러스터 제대로 자바 드라이버를 통해 아틀라스 M0 (무료 계층)에 연결? (0) | 2019.12.20 |