programing

mongodb 집계 정렬

megabox 2023. 4. 29. 09:10
반응형

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

반응형