Mongodb의 mapreduce는 어떻게 전체 문서 대신 기존 테이블의 일부 필드만 업데이트합니까?
给我你的怀抱
给我你的怀抱 2017-04-24 15:59:55
0
1
633

MapRedue 출력

{"아웃", 옵션 }

옵션은 다음과 같습니다:

  • "컬렉션 이름" – mapReduce의 출력은 원래 컬렉션을 대체합니다. 컬렉션이 존재하지 않으면 생성됩니다.
  • { 바꾸기: "컬렉션 이름" } – 위와 동일
  • { merge : "컬렉션 이름" } – 이전 데이터와 새 데이터를 병합하고 이전 데이터를 새 데이터로 교체하고 누락된 데이터를 추가합니다
  • { 감소 : "컬렉션 이름" } - 기존 데이터가 존재하는 경우 원래 기준으로 새 데이터를 추가합니다. (즉, 새 값 = 기존 값 mapReduce 값)
  • { inline : 1 } – 결과가 16MB 미만인 경우에만 컬렉션이 생성되지 않고 결과가 메모리에 저장됩니다.
    컬렉션 이름을 옵션으로 사용하는 경우 다른 옵션과 함께 사용할 수 없습니다.

    • { "out", { replacement : "컬렉션 이름", db : "db 이름" } }

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

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

给我你的怀抱
给我你的怀抱

모든 응답(1)
小葫芦

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

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

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿