MongoDB 고유 집계

Mehvish Ashiq 2023년1월30일
  1. MongoDB 고유 집계
  2. distinct() 메소드를 사용하여 MongoDB에서 고유한 값 찾기
  3. distinct 명령을 사용하여 MongoDB에서 고유한 값 찾기
  4. $group 집계 연산자를 사용하여 MongoDB에서 고유한 값 찾기
MongoDB 고유 집계

이 기사에서는 MongoDB의 고유한 집계에 대해 설명합니다. 이 자습서에서는 프로젝트 요구 사항에 따라 고유한/고유한 값을 찾는 데 사용할 수 있는 다양한 접근 방식을 배웁니다.

MongoDB 고유 집계

MongoDB 고유 집계를 배우려면 채워진 컬렉션이 있어야 합니다. 이를 위해 귀하가 사용할 수 있는 샘플 데이터로 collection이라는 컬렉션을 만들었습니다.

예제 코드:

// MongoDB version 5.0.8

//insert documents
> db.collection.insertMany([
    { "_id": 1, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
    { "_id": 2, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
    { "_id": 3, "state": "punjab", "city": "lahore", "zipcode" : 99559 },
    { "_id": 4, "state": "punjab", "city": "lahore", "zipcode" : 99559 },

    { "_id": 5, "state": "punjab", "city": "karachi", "zipcode" : 99523 },
    { "_id": 6, "state": "punjab", "city": "karachi", "zipcode" : 94608 },
    { "_id": 7, "state": "punjab", "city": "karachi", "zipcode" : 99559 },
    { "_id": 8, "state": "punjab", "city": "karachi", "zipcode" : 99545 },

    { "_id": 9, "state": "punjab", "city": "multan", "zipcode" : 99545 },
    { "_id": 10, "state": "punjab", "city": "multan", "zipcode" : 94608 },
    { "_id": 11, "state": "punjab", "city": "multan", "zipcode" : 99559 },
    { "_id": 12, "state": "punjab", "city": "multan", "zipcode" : 99559 }
]);

다음 명령을 실행하여 삽입된 데이터를 볼 수도 있습니다.

// MongoDB version 5.0.8

//display documents
> db.collection.find();

distinct() 메소드를 사용하여 MongoDB에서 고유한 값 찾기

예제 코드 1:

// MongoDB version 5.0.8

// return the distinct values for the `zipcode` field across the collection
> db.collection.distinct( "zipcode");

출력:

[ 94608, 99523, 99545, 99559 ]

예제 코드 2:

// MongoDB version 5.0.8

// returns unique `city` names where the `zipcode` is either 99559 or 99545 or both.
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} );

출력:

[ "karachi", "lahore", "multan" ]

예제 코드 3:

// MongoDB version 5.0.8

// use the `.length` property to obtain the size/length of the retrieved unique values
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} ).length;

출력:

3

distinct() 메서드는 하나의 컬렉션이나 보기에서 지정된 필드의 고유한 값을 추출하고 출력을 배열로 반환합니다.

하나 이상의 매개변수를 사용하고 최대 3개로 증가합니다. 여기서 첫 번째, 두 번째 및 세 번째 매개변수는 각각 field, queryoptions입니다.

field 매개변수는 고유한(고유한) 값을 반환해야 하는 field 이름입니다. query는 고유한 값을 가져와야 하는 문서를 알려줍니다.

options 매개변수는 선택 사항이지만 options를 지정하는 문서입니다. 이 방법을 사용하는 사람은 다음 사항을 염두에 두어야 합니다.

  1. db.collection.distinct()는 다음 섹션에서 다룰 distinct 명령에 대한 래퍼를 제공합니다.
  2. 지정된 필드의 값이 배열이면 db.collection.distinct()는 배열의 모든 요소를 ​​별도의 값으로 간주합니다. 예를 들어 필드의 값이 [2, [2], 2]인 경우 db.collection.distinct()2, [2]2를 다음으로 사용합니다. 별도의 값.

distinct 명령을 사용하여 MongoDB에서 고유한 값 찾기

예제 코드:

// MongoDB version 5.0.8

// find distinct values
> db.runCommand ( { distinct: "collection", key: "zipcode" } );

출력:

{ "values" : [ 94608, 99523, 99545, 99559 ], "ok" : 1 }

이 코드에서는 하나의 컬렉션에서 지정된 필드에 대한 모든 고유 값을 찾는 distinct 집계 명령을 사용했습니다. 결과적으로 고유한 값의 배열이 있는 하나의 문서를 반환합니다.

또한 쿼리 계획 및 쿼리 통계가 포함된 문서가 포함되어 있습니다.

$group 집계 연산자를 사용하여 MongoDB에서 고유한 값 찾기

예제 코드:

// MongoDB version 5.0.8

// find size of distinct values for each `city`
> db.collection.aggregate([
    {
        $group:{
            "_id": "$city",
            "unique_count": {
                $addToSet: "$zipcode"
             }
        }
    },
    {
        $project:{
            "distinct_zipcodes":{
                $size: "$unique_count"
             }
        }
    }
]);

출력:

{ "_id" : "karachi", "distinct_zipcodes" : 4 }
{ "_id" : "lahore", "distinct_zipcodes" : 2 }
{ "_id" : "multan", "distinct_zipcodes" : 3 }

이 코드 예제는 모든 city에 대한 zipcode 필드의 고유한 값을 반환합니다. 코드에서 무슨 일이 일어나고 있는지 이해하려면 다음 사항을 읽으십시오.

  1. $addToSet은 값이 이미 존재할 때까지 배열에 값을 계속 추가합니다. $addToSet 집계는 unique_count 변수에 저장한 모든 고유 값을 포함하는 배열을 반환합니다.
  2. city 이름을 _id로 만들고 $group 집계 연산자를 사용하여 _idunique_count를 사용하여 그룹화합니다.
  3. 다음으로 $project를 사용하여 필드의 포함/억제를 지정하고, 새 필드를 추가하고, 기존 필드 값을 재설정합니다. 여기에서 $size를 사용하여 $unique_count라는 배열의 크기를 찾고 distinct_zipcodes 변수에 저장합니다. 이 변수는 _id 필드 옆 화면에 추가로 표시됩니다(위의 출력 참조). .
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook