[MONGODB] 배열 값의 합 MongoDB를 집계
MONGODB배열 값의 합 MongoDB를 집계
나는 다음과 같은 데이터의 컬렉션이 있습니다 :
{
"_id" : ObjectId("5516d416d0c2323619ddbca8"),
"date" : "28/02/2015",
"driver" : "user1",
"passengers" : [
{
"user" : "user2",
"times" : 2
},
{
"user" : "user3",
"times" : 3
}
]
}
{
"_id" : ObjectId("5516d517d0c2323619ddbca9"),
"date" : "27/02/2015",
"driver" : "user2",
"passengers" : [
{
"user" : "user1",
"times" : 2
},
{
"user" : "user3",
"times" : 2
}
]
}
그리고 내가 어떤 승객 알 수 있도록 집계를 수행하고자, 그것은 특정 드라이버로했다 번, 내 예에는 다음과 같습니다 User1의 [{드라이버 : USER2, 시간 : 2}] USER2에 대한 [{드라이버 : USER1, 시간 : 2}] 사용자 3에 대한 [{드라이버 : USER1, 시간 : 3}, {드라이버 : USER2, 시간 : 2}]
임 매우 몽고와 새로운 합계로 쉽게 집계를 수행하는 방법을 알고 있지만 때의 내부 배열, 그리고 내 주제는 배열 자체를 때. 어떤 집합의이 종류를 수행 할 수있는 적절한 방법이며, 더 구체적으로, 어떻게 그것을 기반 서버 express.js에서 수행?
해결법
-
==============================
1.통합 프레임 워크 요구 사항을 달성하기 위해, 첫 번째 파이프 라인 단계는 입력 문서에서 승객 배열을 해체 $ 언 와인드 작동을합니다 승객 배열의 사용자와 문서를 일치 문제의 승객에 $ 일치 작업이 될 것입니다 각 소자의 출력 A는 문서에 대한 이전 동작한다. 해체 된 어레이의 다른 $ 정합 동작은 상기 필터는 이전 문서 스트림 만 일치 문서가 $ 프로젝트 연산자 필수 필드 돌출 된 다음 파이프 라인 스테이지로 변성 통과하도록하는 것을 따른다. 그래서 기본적으로 사용자 3에 대한 집계 파이프 라인은 같은 것입니다 :
통합 프레임 워크 요구 사항을 달성하기 위해, 첫 번째 파이프 라인 단계는 입력 문서에서 승객 배열을 해체 $ 언 와인드 작동을합니다 승객 배열의 사용자와 문서를 일치 문제의 승객에 $ 일치 작업이 될 것입니다 각 소자의 출력 A는 문서에 대한 이전 동작한다. 해체 된 어레이의 다른 $ 정합 동작은 상기 필터는 이전 문서 스트림 만 일치 문서가 $ 프로젝트 연산자 필수 필드 돌출 된 다음 파이프 라인 스테이지로 변성 통과하도록하는 것을 따른다. 그래서 기본적으로 사용자 3에 대한 집계 파이프 라인은 같은 것입니다 :
db.collection.aggregate([ { "$match": { "passengers.user": "user3" } }, { "$unwind": "$passengers" }, { "$match": { "passengers.user": "user3" } }, { "$project": { "_id": 0, "driver": "$driver", "times": "$passengers.times" } } ])
결과:
/* 0 */ { "result" : [ { "driver" : "user1", "times" : 3 }, { "driver" : "user2", "times" : 2 } ], "ok" : 1 }
최신 정보:
당신이 $ 합 연산자를 사용하여 전체 승객 시간을 계산 위치를 바로 지난 $ 프로젝트 파이프 라인 단계 전에 $ 그룹 작업을 할 수있는 언급 한 바와 같이, 다른 날짜로 드라이버에 중복 그룹화 :
db.collection.aggregate([ { "$match": { "passengers.user": "user3" } }, { "$unwind": "$passengers" }, { "$match": { "passengers.user": "user3" } }, { "$group": { "_id": "$driver", "total": { "$sum": "$passengers.times" } } }, { "$project": { "_id": 0, "driver": "$_id", "total": 1 } } ])
결과:
/* 0 */ { "result" : [ { "total" : 2, "driver" : "user2" }, { "total" : 3, "driver" : "user1" } ], "ok" : 1 }
from https://stackoverflow.com/questions/29319799/mongodb-aggregation-with-sum-of-array-values by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 쿼리에 $에 전달 된 매개 변수의 최대 수는 무엇입니까? (0) | 2019.12.24 |
---|---|
[MONGODB] WAMP에 MongoDB를 PHP 드라이버 설치 문제 (0) | 2019.12.24 |
[MONGODB] 여러 필드와 MongoDB를 텍스트 검색 (0) | 2019.12.24 |
[MONGODB] 방법 2 명 MongoDB의 컬렉션을 비교? (0) | 2019.12.24 |
[MONGODB] 필드 MongoDB의 존재 질의 향상 (0) | 2019.12.24 |