복붙노트

[MONGODB] 집계 프레임 워크에 대한 설명 MongoDB를

MONGODB

집계 프레임 워크에 대한 설명 MongoDB를

MongoDB의에서 집계 프레임 워크에 대한 설명 기능이 있습니까? 나는 문서를 볼 수 없습니다.

집계 프레임 워크 내에서 어떻게 쿼리 수행을 확인하는 다른 방법이 아니라면?

난 그냥 이렇게 발견으로 알고

db.collection.find().explain()

그러나 통합 프레임 워크 오류가 발생합니다

db.collection.aggregate(
    { $project : { "Tags._id" : 1 }},
    { $unwind : "$Tags" },
    { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
    { 
        $group: 
        { 
            _id : { id: "$_id"},
            "count": { $sum:1 } 
        }
    },
    { $sort: {"count":-1}}
).explain()

해결법

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

    1.단지에서 순서를 변경, MongoDB를 버전 3.0로 시작

    단지에서 순서를 변경, MongoDB를 버전 3.0로 시작

    collection.aggregate(...).explain()
    

    collection.explain().aggregate(...)
    

    (여기에 문서를) 원하는 결과를 얻을 수 있습니다.

    이전 버전> = 2.6의 경우는 집계 파이프 라인 작업에 대한 옵션을 설명 사용해야합니다

    db.collection.aggregate([
        { $project : { "Tags._id" : 1 }},
        { $unwind : "$Tags" },
        { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
        { $group: { 
            _id : "$_id",
            count: { $sum:1 } 
        }},
        {$sort: {"count":-1}}
      ],
      {
        explain:true
      }
    )
    

    집계 프레임 워크 중요한 고려 사항 인덱스는 파이프 라인에 대한 초기 데이터를 가져 오는 데 사용할 수 있다는 것입니다 ($ 일치 예를 들어 사용을, $ 종류, $ 파이프 라인의 시작 부분에 geonear)뿐만 아니라, 이후 $ 조회 및 $ graphLookup는 단. 데이터의 메모리가 될 것이다 (예를 들어 $ 프로젝트 $ 풀림 및 $ 기 같은 단계를 통과 한) 상기 조작 처리 집약 파이프 라인으로 패치 된 후에합니다 (allowDiskUse 옵션이 설정되어있는 경우 가능한 임시 파일을 사용하여).

    일반적으로, 집계 파이프 라인에 의해 최적화 할 수 있습니다 :

    자동 MongoDB의 서버 버전에 따라 일 집계 파이프 라인 최적화의 숫자도 있습니다. 예를 들어, 인접 스테이지 합체 및 / 또는 상기 출력 결과에 영향을 미치지 않고 수행을 개선하기 위해 재 배열 될 수있다.

    MongoDB를 3.4 현재, 집계 프레임 워크는 옵션은 파이프 라인이 처리되는 방법에 대한 정보를 제공하지만, 발견 () 쿼리에 대한 executionStats 모드와 같은 수준의 세부 정보를 지원하지 않습니다 설명합니다. 당신이 초기 쿼리 실행을 최적화에 집중하는 경우 당신은 가능성이 도움이 동등한 발견 ()을 검토 할 수 있습니다. executionStats 또는 allPlansExecution의 상세와 () 쿼리를 설명합니다.

    / upvote에 MongoDB의 문제 추적기에 도움 최적화 / 프로필 집계 파이프 라인에 대한 더 자세한 실행 통계에 관한 볼 수있는 몇 가지 관련 기능 요청이 있습니다 :

  2. ==============================

    2.2.6.x 버전의 MongoDB를 시작하면 사용자가 통합 프레임 워크를 설명 할 수 있습니다.

    2.6.x 버전의 MongoDB를 시작하면 사용자가 통합 프레임 워크를 설명 할 수 있습니다.

    당신이해야 할 모든 설명 추가하는 것입니다 : 사실

    db.records.aggregate(
      [ ...your pipeline...],
      { explain: true }
    )
    

    라파 덕분에, 나는 심지어 2.4에서 할 가능하다는 것을 알고 있지만 runCommand를 통해 (). 그러나 지금 당신은뿐만 아니라 총을 사용할 수 있습니다.

  3. ==============================

    3.

    집계 프레임 워크는 우리가 하나 명 이상의 컬렉션을 문서에 보고서 나 분석의 여러 유형을 실행할 수 있습니다 MongoDB를 내 분석 도구의 집합입니다. 파이프 라인의 아이디어를 바탕으로. 우리는 MongoDB를 수집에서 입력을하고 그것의 입력에 다른 작업을 수행 각각의 하나 또는 그 이상의 단계를 통해 그 컬렉션에서 문서를 전달합니다. 각 스테이지는 스테이지 전에 출력으로서 생성 된 어떤 입력을 취한다. 그리고 모든 단계에 대한 입력 및 출력 문서의 흐름이다. 각 단계는 수행하는 특정 작업이 있습니다. 이 문서의 특정 양식을 기대하고 자체 문서의 스트림을하는 특정 출력을 생성합니다. 파이프 라인의 끝에서, 우리는 출력에 액세스 할 수 있습니다.

    개별 단계는 데이터 프로세싱 장치이다. 각 단계는, 한번에 입력으로 문서의 하나의 스트림을 취하는 시간에 각 문서를 처리하는 문서의 출력 스트림을 생성한다. 또, 한 번에 하나씩. 각 단계는 우리가이 일에 관심이있는 어떤 작업을 수행 할 수있는 단계를 매개 변수화 제어 할 수 노브 또는 튜너 블 세트를 제공합니다. 무대 수행 그래서 일반적인 작업 - 어떤 종류의 범용 작업과 우리가 작업하고 있다는 문서의 특정 설정을위한 단계를 파라미터. 그리고 우리는 그 문서와는 그 단계를 원하는 정확히. 이 튜너 블은 일반적으로 우리가 필드를 수정 것를 제공 할 수있는 사업자의 형태를 취할, 산술 연산, 모양 변경 문서를 수행하거나 축적 작업의 일종뿐만 아니라 다른 것들의 veriety을한다. 종종, 그것은 우리가 하나의 파이프 라인 내에서 단계 여러 번 같은 유형을 포함 할 거라고 경우.

    예를 들면 우리는 우리의 파이프 라인에 전체 컬렉션을 통과하지 않도록 우리는 초기 필터를 수행 할 수 있습니다. 그러나, 나중에에 몇 가지 추가 처리 다음, 다시 조건의 다른 세트를 사용하여 한 번 필터합니다. 그래서, 요약하자면, 파이프 라인은 MongoDB를 수집와 함께 작동합니다. 그들은 그것의 입력에 다른 데이터 처리 작업을 수행하고 출력이 다음 단계로 전달되는으로 문서를 생산하고, 각각의 단계로 구성되어 있습니다. 그리고 마지막으로 파이프 라인 출력의 끝에 우리가 다음 우리의 응용 프로그램 내에서 일을 할 수있는 생산된다. 많은 경우에, 그것은 개인 파이프 라인 내에서 단계의 동일한 유형, 여러 번 포함 할 필요가있다.

  4. from https://stackoverflow.com/questions/12702080/mongodb-explain-for-aggregation-framework by cc-by-sa and MIT license