반응형
집계 프레임워크를 사용한 MongoDB의 그룹 수
내 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를 사용하여 동일한 작업을 수행하려면 어떻게 해야 합니까?
잠재적인 중복 항목을 수용하려면 두 개를 사용해야 합니다.$group
작업:
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 } ]
$group
명령에 의한 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단계가 있습니다.
$group
$sort
이제, 기본적으로$group
무대는_id
문서의 일부로 지정하는 필드입니다.그것이 바로 그 가치입니다.$group
연산자 자체가 매우 엄격한 월권 프레임워크 구문 해석을 사용합니다. _id
그룹 스테이지가 표시하는 문서를 구성하기 위해 사용하는 것을 정의하고, 제어하고, 조정하는 방법입니다.
아래 질의는 사람들과 회사들의 관계를 찾습니다.$sum
연산자:
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
}
}])
언급URL : https://stackoverflow.com/questions/13240039/group-count-with-mongodb-using-aggregation-framework
반응형
'source' 카테고리의 다른 글
로컬 Git 브랜치를 다른 이름의 원격으로 쉽게 푸시할 수 있는 방법은 무엇입니까? (0) | 2023.05.02 |
---|---|
web.config 파일이 전체 오류 메시지를 표시하도록 설정하는 방법 (0) | 2023.05.02 |
Excel 시트에서 Datetime 값을 읽는 중 (0) | 2023.05.02 |
Git가 프록시 서버와 함께 작동하도록 하는 중 - "Request timeout"(요청 시간 초과됨)으로 인해 실패합니다. (0) | 2023.05.02 |
ASP의 주장은 무엇입니까?NET 아이덴티티 (0) | 2023.05.02 |