Aggregation Pipeline을 사용하여 MongoDB의 여러 속성 값을 기반으로 항목 수를 검색하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-26 19:20:29
원래의
471명이 탐색했습니다.

How to Retrieve Item Count Based on Multiple Attribute Values in MongoDB using Aggregation Pipeline?

MongoDB에서 여러 속성 값을 확인하여 항목 목록 검색

MongoDB로 작업할 때 여러 속성 값을 기반으로 특정 항목을 검색해야 하는 경우가 종종 있습니다. MySQL에서 사용되는 IN 조건과 유사한 속성 값. 이 기사에서는 MongoDB에서 파이프라인 작업 조합을 사용하여 이를 달성하는 방법을 보여줍니다.

집계 프레임워크

이 시나리오에서는 집계 프레임워크를 사용하여 "venueList"라고 알려진 MongoDB 컬렉션에서 데이터를 필터링하고 집계하는 파이프라인입니다. 목표는 장소 ID 목록을 기반으로 Linux 또는 Ubuntu와 같은 특정 운영 체제를 사용하는 총 사용자 수를 검색하는 것입니다.

파이프라인 단계

파이프라인은 데이터를 변환하고 요약하기 위해 함께 작동하는 여러 단계로 구성됩니다.

  1. $match: 지정된 장소 ID를 기반으로 컬렉션을 필터링하여 관련 문서만 고려되도록 합니다. .
  2. $unwind: "venueList" 및 "sum" 배열을 비정규화하여 각 장소 및 사용자 에이전트 배포에 대한 개별 문서를 생성합니다.
  3. $match: 원하는 장소 ID만 포함되도록 비정규화된 문서를 다시 필터링합니다.
  4. $unwind: "sum" 배열을 추가로 비정규화하여 각 사용자 에이전트 배포에 대한 개별 문서를 생성합니다. .
  5. **$group:** $cond 연산자를 사용하여 비정규화된 문서를 집계하여 각 운영 체제(예: "linux" 및 "ubuntu")에 대한 별도의 필드를 만듭니다. $sum 연산자는 각 운영 체제의 총 사용자 수를 계산하는 데 사용됩니다.

예상 출력

집계 파이프라인의 최종 출력은 다음과 같습니다. 지정된 장소 ID에 걸쳐 Linux 및 Ubuntu 사용자의 총 수가 포함된 문서:

<code class="json">{
  "_id": null,
  "linux": 14,
  "ubuntu": 4
}</code>
로그인 후 복사

Go 구현

mgo 패키지를 사용하여 Go에서 이 파이프라인을 사용하려면 , 다음 단계를 따르세요:

<code class="go">query := []bson.M{
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList"},
  {"$match": bson.M{"venueList.id": bson.M{"$in": []string{"VID1212", "VID4343"}}}},
  {"$unwind": "$venueList.sum"},
  {
    "$group": bson.M{
      "_id":        nil,
      "linux":      bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "linux"}}, "$venueList.sum.value", 0}}},
      "ubuntu":     bson.M{"$sum": bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"$venueList.sum.name", "ubuntu"}}, "$venueList.sum.value", 0}}},
    },
  },
}</code>
로그인 후 복사

위 내용은 Aggregation Pipeline을 사용하여 MongoDB의 여러 속성 값을 기반으로 항목 수를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!