찾다

 >  Q&A  >  본문

Mongodb의 mapreduce는 어떻게 전체 문서 대신 기존 테이블의 일부 필드만 업데이트합니까?

MapRedue 출력

{"아웃", 옵션 }

옵션은 다음과 같습니다:

병합 옵션이 가장 가능성이 높지만 실험 결과 축소 또는 마무리에서 개체의 필드만 업데이트하는 대신 항상 "_id"를 기반으로 전체 문서를 업데이트하는 것으로 나타났습니다.

예를 들어, 10개가 넘는 필드가 있고 emps 필드가 없는 기존 세트 A가 있는데 MR 작업을 실행하면 감소 결과는 {key,emps:[["0132",70],["1443"입니다. ,30]]}, 기존 세트 A에 emps 필드를 추가하고 싶은데 결과적으로 10개가 넘는 필드가 사라지고 emps 필드만 남게 되었습니다.
원래는 축소에서 db 개체를 참조하고 수동으로 업데이트하려고 했지만 현재 버전에서는 db 개체 참조를 허용하지 않습니다.
이제 mapreduce 및 업데이트 후에만 forEach를 수동으로 실행할 수 있습니다.
mapreduce에 해당하는 솔루션이 있나요?

给我你的怀抱给我你的怀抱2878일 전659

모든 응답(1)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-24 16:01:55

    reduce을 사용하면 제공된 축소 함수(reducer)를 사용하여 결과 세트에서 기존 결과새로 계산된 결과를 계산합니다. 최종 결과가 저장됩니다. 여기서 가장 중요한 것은 매퍼가 출력하는 중간 결과를 최종 결과와 동일한 형식으로 만드는 것입니다. 이러한 감속기는 두 위치에서 사용됩니다. 한 번은 축소에서, 한 번은 출력에서 ​​동일한 형식, 특히 계층 구조를 사용하면 작성하기가 훨씬 쉽습니다. 리듀서는 여러 결과를 병합하는 역할만 담당하는 것으로 이해하면 됩니다. 매퍼가 중간 결과만 출력한다면 리듀서를 거치지 않고 바로 최종 결과로 사용해야 합니다. 실제로 MongoDB에서는 키가 하나의 매퍼 출력에만 해당하는 경우 실제로는 리듀서를 거치지 않고 직접 출력됩니다.

    http://docs.mongodb.org/manual/reference/method/db.collection.mapReduce/#output-to-a-collection-with-an-action

    출력 컬렉션이 이미 있는 경우 새 결과를 기존 결과와 병합합니다. 기존 문서에 새 결과와 동일한 키가 있는 경우 새 문서와 기존 문서 모두에 축소 기능을 적용하고 기존 문서를 덮어씁니다. 결과입니다.

    회신하다
    0
  • 취소회신하다