몽구스와 개수로 그룹화하는 방법

인기 없는 의견일 수 있지만 마음에 들지 않습니다Mongoosejs docs. 많은 지식을 당연하게 여기고 코드 샘플이 빈약하다고 생각합니다. 하지만 아마도 나일거야 :shrugs:

어쨌든 다음과 같은 문서 모음이 있습니다.

[
     {
     _id: 1,
     category: food,
     name: avocado
     },
     {
     _id: 2,
     category: food,
     name: orange
     },
     {
     _id: 3,
     category: drink,
     name: milk
     },
]


다음과 같은 데이터를 반환하는 끝점을 만들고 싶었습니다.
g

data: {
     food: 2,
     drink: 1
}



기본적으로 범주의 이름과 문서 수입니다. 글쎄, 그것은 몇 가지 자습서와 다른 SO 스레드에 걸친 여정을 가져 왔습니다.

면책 조항: 저는 아마도 MongoDB에 더 익숙할 것입니다. 예전에는 그랬지만 인생의 많은 일처럼 잊어버리고 MongoDB와 Mongoose를 다시 사용할 준비가 되지 않았습니다. 바로 몽구스로 향했습니다.

먼저 Mongoose와의 그룹화가 Aggregate 이라는 것을 발견했습니다. 나는 Model.aggregate() 를 찾았고, 이것은 나를 이 tutorial 로 이끌었습니다. 그들의 The $group Stage 섹션은 저에게 효과적인 솔루션을 제공했습니다.

const data = await YourModelName.aggregate([
  {
    $group: {
      _id: '$category',
      count: { $sum: 1 } // this means that the count will increment by 1
    }
  }
]);


그러나 데이터는 큰 문제가 아니라 약간 다르게 반환되었습니다.

data: [
     {
     _id: "food",
     count: 2
     },
     {
     _id: "drink",
     count: 1
     }
]


큰 문제는 아니었고 가능한 한 좋았을 것입니다. 하지만 저는 계속해서 탐색했습니다. 이로 인해 여러 SO 스레드(그렇게 많지는 않음), 약간 다른 주제가 있었지만 거의 동일한 구문으로 진행되었습니다.

그러다가 우연히 aggregate.sortByCount() here 을 발견했습니다.

const data = await Machine.aggregate().sortByCount("category");

sortByCount는 필드의 이름을 예상하고 전체 $group, $count 등을 수행합니다. 또는 적어도 이것은 나에게 일어난 일입니다. 훨씬 더 간단합니다.

지금은 이 정도면 충분하다고 생각합니다. 이 주제에 대한 탐색을 중단하겠습니다. 이것이 도움이 되었기를 바랍니다(:

좋은 웹페이지 즐겨찾기