복붙노트

[MONGODB] 필드 / 키마다 고유 값 MongoDB의 카운트 수가

MONGODB

필드 / 키마다 고유 값 MongoDB의 카운트 수가

필드가 DB에 포함 얼마나 많은 고유 값 계산하는 쿼리가 있습니다.

f.e 나는이 나라의 필드가 국가 값의 8 종류가 있습니다 (스페인, 잉글랜드, 프랑스, ​​등등 ...)

누군가가 새로운 나라로 더 많은 문서를 추가하는 경우 I는 반환 구에 질의를하고 싶습니다.

쉬운 방법은 그룹 카운트 있습니까?

해결법

  1. ==============================

    1.MongoDB의 필드는 고유 값의 어레이를 리턴하는 별개의 명령을 갖는다 당신은 카운트 배열의 길이를 확인할 수 있습니다.

    MongoDB의 필드는 고유 값의 어레이를 리턴하는 별개의 명령을 갖는다 당신은 카운트 배열의 길이를 확인할 수 있습니다.

    뿐만 아니라 쉘 db.collection.distinct () 도우미가있다 :

    > db.countries.distinct('country');
    [ "Spain", "England", "France", "Australia" ]
    
    > db.countries.distinct('country').length
    4
    
  2. ==============================

    2.여기에 통합 API를 사용하는 예입니다. 우리는 문서의 배열 속성에서 대소 문자를 구별 단어로 그룹화하고 사건을 복잡하게합니다.

    여기에 통합 API를 사용하는 예입니다. 우리는 문서의 배열 속성에서 대소 문자를 구별 단어로 그룹화하고 사건을 복잡하게합니다.

    db.articles.aggregate([
        {
            $match: {
                keywords: { $not: {$size: 0} }
            }
        },
        { $unwind: "$keywords" },
        {
            $group: {
                _id: {$toLower: '$keywords'},
                count: { $sum: 1 }
            }
        },
        {
            $match: {
                count: { $gte: 2 }
            }
        },
        { $sort : { count : -1} },
        { $limit : 100 }
    ]);
    

    예컨대주고 그 결과

    { "_id" : "inflammation", "count" : 765 }
    { "_id" : "obesity", "count" : 641 }
    { "_id" : "epidemiology", "count" : 617 }
    { "_id" : "cancer", "count" : 604 }
    { "_id" : "breast cancer", "count" : 596 }
    { "_id" : "apoptosis", "count" : 570 }
    { "_id" : "children", "count" : 487 }
    { "_id" : "depression", "count" : 474 }
    { "_id" : "hiv", "count" : 468 }
    { "_id" : "prognosis", "count" : 428 }
    
  3. ==============================

    3.MongoDB를 3.4.4 및 최신을 사용하면 카운트를 얻을 $ arrayToObject 연산자의 사용과 $의 replaceRoot 파이프 라인을 활용할 수 있습니다.

    MongoDB를 3.4.4 및 최신을 사용하면 카운트를 얻을 $ arrayToObject 연산자의 사용과 $의 replaceRoot 파이프 라인을 활용할 수 있습니다.

    예를 들어, 서로 다른 역할을 가진 사용자의 집합이 있다고 가정하면 역할의 별개의 수를 계산하고 싶습니다. 다음과 같은 집계 파이프 라인을 실행해야합니다 :

    db.users.aggregate([
        { "$group": {
            "_id": { "$toLower": "$role" },
            "count": { "$sum": 1 }
        } },
        { "$group": {
            "_id": null,
            "counts": {
                "$push": { "k": "$_id", "v": "$count" }
            }
        } },
        { "$replaceRoot": {
            "newRoot": { "$arrayToObject": "$counts" }
        } }    
    ])
    

    예제 출력

    {
        "user" : 67,
        "superuser" : 5,
        "admin" : 4,
        "moderator" : 12
    }
    
  4. ==============================

    4.당신은 몽고 쉘 확장에 활용할 수 있습니다. 그것은 하나의 .js 당신은 Node.js를 코딩하는 경우 $ HOME은 / .mongorc.js가, 또는 프로그래밍 / 너무 io.js 당신의 당신이 추가 할 수 있음을 가져올 수 있습니다.

    당신은 몽고 쉘 확장에 활용할 수 있습니다. 그것은 하나의 .js 당신은 Node.js를 코딩하는 경우 $ HOME은 / .mongorc.js가, 또는 프로그래밍 / 너무 io.js 당신의 당신이 추가 할 수 있음을 가져올 수 있습니다.

    견본

    필드 카운트의 각 구별 값에 대해 문서에서 발생 선택적 쿼리에 의해 필터링

    {
      "Abagail": 1,
      "Abbey": 3,
      "Abbie": 1,
      ...
    }
    

    필드 파라미터 필드의 배열 될 수있다

    {
      "Austin,Educator" : 1,
      "Aurelia,Educator" : 1,
      "Augustine,Carpenter" : 1,
      ...
    }
    
  5. ==============================

    5.컬렉션의 field_1에서 뚜렷한 찾을 우리는 다음과 같이 할 수도보다 약간 WHERE 조건을하고자합니다 :

    컬렉션의 field_1에서 뚜렷한 찾을 우리는 다음과 같이 할 수도보다 약간 WHERE 조건을하고자합니다 :

    db.your_collection_name.distinct ({이 문서를 반환해야합니다 조건 여기} 'field_1')

    그래서, 연령> 25처럼 될 것이다 컬렉션에서 숫자 별개의 이름을 찾을 수 있습니다 :

    db.your_collection_name.distinct ( '이름', { '나이': { "$있다": 25}})

    희망이 도움이!

  6. from https://stackoverflow.com/questions/14924495/mongodb-count-num-of-distinct-values-per-field-key by cc-by-sa and MIT license