[MONGODB] MongoDB를이 통합 프레임 워크를 사용하여와 그룹 수
MONGODBMongoDB를이 통합 프레임 워크를 사용하여와 그룹 수
의 내 MongoDB의 스키마 모습은 다음과 같이 가정 해 봅시다 :
{car_id: "...", owner_id: "..."}
이것은 다 대다 관계이다. 예를 들어, 데이터는 다음과 같습니다
+-----+----------+--------+
| _id | owner_id | car_id |
+-----+----------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 4 |
| 7 | 3 | 5 |
| 8 | 3 | 6 |
| 9 | 3 | 7 |
| 10 | 1 | 1 | <-- not unique
+-----+----------+--------+
나는 각 소유자가 소유 자동차의 수를 싶어. SQL에서는이 같을 수 있습니다
SELECT owner_id, COUNT(*) AS cars_owned
FROM (SELECT owner_id FROM car_owners GROUP BY owner_id, car_id) AS t
GROUP BY owner_id;
이 경우, 결과는 다음과 같을 것이다 :
+----------+------------+
| owner_id | cars_owned |
+----------+------------+
| 1 | 3 |
| 2 | 2 |
| 3 | 4 |
+----------+------------+
어떻게 집계 프레임 워크를 사용하여 MongoDB를 사용하여이 같은 일을 수행 할 수 있습니까?
해결법
-
==============================
1.잠재적 중복을 수용하기 위해, 당신은 두 개의 $ 그룹 작업을 사용해야합니다 :
잠재적 중복을 수용하기 위해, 당신은 두 개의 $ 그룹 작업을 사용해야합니다 :
db.test.aggregate([ { $group: { _id: { owner_id: '$owner_id', car_id: '$car_id' } }}, { $group: { _id: '$_id.owner_id', cars_owned: { $sum: 1 } }}, { $project: { _id: 0, owner_id: '$_id', cars_owned: 1 }}] , function(err, result){ console.log(result); } );
의 형식의 결과를 제공합니다 :
[ { cars_owned: 2, owner_id: 10 }, { cars_owned: 1, owner_id: 11 } ]
-
==============================
2.$ 그룹은 명령에 의해 SQL 그룹과 유사하다. 아래의 예에서, 우리는 그들이 설립 된 연도를 기준으로 집계 기업 것입니다. 그리고 각 회사에 대한 직원의 평균을 계산합니다.
$ 그룹은 명령에 의해 SQL 그룹과 유사하다. 아래의 예에서, 우리는 그들이 설립 된 연도를 기준으로 집계 기업 것입니다. 그리고 각 회사에 대한 직원의 평균을 계산합니다.
db.companies.aggregate([{ $group: { _id: { founded_year: "$founded_year" }, average_number_of_employees: { $avg: "$number_of_employees" } } }, { $sort: { average_number_of_employees: -1 } } ])
이 집계 파이프 라인은 2 단계가 있습니다
이제, $ 조별 리그에 근본적인 우리는 문서의 일부로서 지정하는 _id 필드입니다. 즉, 사칭 프레임 워크 구문의 매우 엄격한 해석을 사용하여 $ 그룹 연산자 자체의 값입니다. _id 우리가 조정 조별 사용하는 그것을보고하는 문서를 구성하기 위해 무엇을 어떻게, 우리가 제어하는 방법을 정의하는 방법이다.
쿼리 아래는 $ 합 연산자를 사용하여 기업과 사람의 관계를 찾을 수 있습니다 :
db.companies.aggregate([{ $match: { "relationships.person": { $ne: null } } }, { $project: { relationships: 1, _id: 0 } }, { $unwind: "$relationships" }, { $group: { _id: "$relationships.person", count: { $sum: 1 } } }, { $sort: { count: -1 } }])
from https://stackoverflow.com/questions/13240039/group-count-with-mongodb-using-aggregation-framework by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 저장 위치와 삽입의 차이점은 무엇입니까? (0) | 2019.12.21 |
---|---|
[MONGODB] 유성 : 내가 어떻게 백업 내 몽고 데이터베이스 (0) | 2019.12.21 |
[MONGODB] MongoDB의 스키마 디자인 - 많은 작은 문서 또는 적은 수의 큰 문서? (0) | 2019.12.21 |
[MONGODB] 몽고 인터페이스 [폐쇄] (0) | 2019.12.21 |
[MONGODB] "example.com"또는 "www.example.com"에 Meteor.js의 배포? (0) | 2019.12.21 |