복붙노트

[MONGODB] $ 생략하고 통합 프레임 워크에서 $ 한계

MONGODB

$ 생략하고 통합 프레임 워크에서 $ 한계

나는이 문서를 읽을 때 나는 다음과 같은 메모를 발견 :

내가 바로 이것에 대해 해요 경우 내가 함께 같은 정렬 $ 및 $ 제한을 사용하는 경우에만 적용

db.coll.aggregate([
    ...,
    {$sort: ...},
    {$limit: limit},
    ...
]);

그러나, 나는 대부분의 시간은 우리가 가지고있는 것 같아

db.coll.aggregate([
    ...,
    {$sort: ...},
    {$skip: skip},
    {$limit: limit},
    ...
]);

질문 1 :합니까 그것은 내가 여기 건너 $를 사용하는 경우 위의 규칙이 적용되지 않습니다 의미?

이론적으로 MongoDB를 여전히 상위 N 레코드를 계산 만 상위 N 레코드를 정렬하여 성능을 향상시킬 수 있기 때문에 나는이 질문을 부탁드립니다. 나는이 생각에 대한 문서를 찾을 수 없습니다. 그리고 규칙이 적용되지 않는 경우

질문 2 : 성능을 향상시키기 위해 다음과 같은 내 쿼리를 변경해야합니까 필요?

db.coll.aggregate([
    ...,
    {$sort: ...},
    {$limit: skip + limit},
    {$skip: skip},
    {$limit: limit},
    ...
]);

편집 : 내가 생각하는 내 사용 사례는 차종 더 의미가 위의 질문을 만들 것입니다 설명합니다. 나는 제품을 찾기 위해 MongoDB를 2.6에서 제공하는 텍스트 검색 기능을 사용하고 있습니다. 나는 사용자가 입력하는 경우 반환 "빨간색"가 너무 많은 결과가 같은 매우 일반적인 키워드를 걱정하고있다. 따라서 나는이 결과를 생성하는 더 나은 방법을 찾고 있어요.

EDIT2 : 그것은 밝혀 것과 같음 위의 마지막 코드

db.coll.aggregate([
    ...,
    {$sort: ...},
    {$limit: skip + limit},
    {$skip: skip},
    ...
]);

따라서 우리는 항상 상위 n 개의 규칙을 적용하려면이 양식을 사용할 수 있습니다.

해결법

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

    1.이것은 우리가 다음에 대한 이야기 ​​텍스트 검색 쿼리이기 때문에 가장 최적의 형태는 이것이다 :

    이것은 우리가 다음에 대한 이야기 ​​텍스트 검색 쿼리이기 때문에 가장 최적의 형태는 이것이다 :

    db.collection.aggregate([
        { 
           "$match": {
                   "$text": { "$search": "cake tea" }
        }
        },
        { "$sort": { "score": { "$meta": "textScore" } } },
        { "$limit": skip + limit },
        { "$skip": skip }
    ])
    

    상단에서 메모리 보호 구역에 대한 이론적 근거 "종류"결과 것이다 말하자면,이 데이터의 몇 가지 합리적인 "페이지"이외에는 아무 것도 최적되지 않습니다로서 자신의 "한계"의 내에서만 작동합니다.

    메모리 소비에 대한 합리적인 것 이상으로, 추가 단계는 가능성이 긍정적 인 것보다 부정적인 효과를 가질 것이다.

    이 정말 현재의 형태로 MongoDB를 사용할 수있는 텍스트 검색 기능의 실질적인 제한이 있습니다. 하지만 더 자세한 아무것도 더 높은 성능을 필요로 들어, 다음 마찬가지로 당신은 더 나은 텍스트 검색 솔루션 외부 "내장 목적"을 사용하여 꺼져있는 많은 SQL "전체 텍스트"솔루션의 경우.

  2. from https://stackoverflow.com/questions/24160037/skip-and-limit-in-aggregation-framework by cc-by-sa and MIT license