mongodb 집계 정렬
저는 학생들과 그들의 연락처에 대한 데이터베이스를 가지고 있습니다.저는 학생들이 가장 많이 모이는 우편번호를 찾고 있습니다.학생들을 위한 서류는 이렇게 보입니다.
{httpcode: 'smi0001', 이름: 'bob', 성: 'smith', 우편번호: 2001}
저는 집계 프레임워크를 사용하여 학생 수가 가장 많은 우편번호를 알아낼 수 있다고 생각했습니다.
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})
이것은 예상대로 작동합니다(포스트 코드를 다음과 같이 표시)._id
그리고 각 우편번호의 학생 수는 '학생'이지만, 제가 추가하면.$sort
파이프라인에 그것은 결과 대신에 전체 학생 컬렉션에 의해 정렬하려고 시도하는 것처럼 보입니다.$group
작동.
내가 하려는 모습은...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})
하지만 그것은 전체 컬렉션을 반환하고 무시합니다.$project
그리고.$group
...내가 뭘 빼놓았나요?저는 그냥 학생 수를 줄여 분류하고 첫 번째 물건을 돌려줄 수 있을 거라고 생각했습니다.도움을 주셔서 미리 감사드립니다.
거의 죽을 뻔했잖아요
db.test.aggregate(
{$group: {_id: '$postcode', students: {$sum: 1}}},
{$sort: {_id: -1}}
);
를 제공합니다(샘플과 일치하는 테스트 데이터를 추가했습니다).
{
"result" : [
{
"_id" : 2003,
"students" : 3
},
{
"_id" : 2002,
"students" : 1
},
{
"_id" : 2001,
"students" : 2
}
],
"ok" : 1
}
당신은 겉모습이 있었습니다.{}
모든 것을 둘러싸고, 그것은 약간의 혼란을 야기했습니다.그룹 및 정렬이 파이프라인에서 별도의 작업으로 작동하지 않았습니다.
당신은 이 사건에 프로젝트가 정말 필요하지 않았습니다.
업데이트 이렇게 "학생"별로 정렬하여 가장 큰 우편 번호(인구별)를 먼저 얻고 싶을 수 있습니다.
db.test.aggregate(
{$group: {_id: '$postcode', students: {$sum: 1}}},
{$sort: {students: -1}}
);
당신의 구문이 약간 잘못된 것 같습니다.파이프라인의 각 집계 작업은 자체 문서여야 합니다.
db.students.aggregate( {$project: ...}, {$group: ...}, {$sort: ...} )
당신의 경우, 다음과 같이 해야 합니다.
db.students.aggregate(
{$project: { postcode: 1 }},
{$group: {_id: '$postcode', students: {$sum: 1}}},
{$sort: {students: -1}}
)
저는 당신의 스키마를 기반으로 샘플 컬렉션에서 테스트했고 학생 수에 따라 분류된 포스트 코드를 내림차순으로 정렬하는 것이 저에게 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/12451322/mongodb-aggregation-sort
'programing' 카테고리의 다른 글
시스템 삭제 방법.MongoDB에서 프로필 수집? (0) | 2023.04.29 |
---|---|
App Transport Security 정책에 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다. (0) | 2023.04.29 |
WPF에서 현재 마우스 화면 좌표를 가져오려면 어떻게 해야 합니까? (0) | 2023.04.29 |
특정 셀 아파치 poi 3.9의 글꼴 색 변경 방법 (0) | 2023.04.29 |
iOS에서 HTML을 NSA 속성 문자열로 변환 (0) | 2023.04.29 |