맵 기능에서 다른 콜렉션에 액세스하고 싶습니다. 키에 대한 조회를 수행하고 일부 집계를 수행 할 수 있습니다. db.collection_name
또는 이와 유사한 BSON 코드를 사용하여 컬렉션에 액세스 할 수 있습니까?MongoDB의 맵에서 다른 콜렉션에 액세스하기
3
A
답변
6
로컬로 시도하면 제대로 작동합니다. 그러나 콜렉션 또는 콜렉션의 데이터가 샤드에 국한되지 않기 때문에 샤드 된 시나리오에서 완전히 실패합니다.
M/R이 추적하기 어려울 수있는 계단식 쿼리를 유발할 수도 있기 때문에 좋지 않습니다.
- 데이터를를 비정규 화 : 수집
B
의 필드x,y,z
을 필요로A
컬렉션map
경우,A
에 해당 필드를 복사이 문제가 발생하는 경우, 당신은 몇 optiosn 있습니다. 예, 정규화되지는 않았지만 MongoDB는 관계형 데이터베이스가 아니며 정규화되지 않았습니다.
- 여러 부분으로 구성된 M/R : 여러 가지 작업을 수행하고 결과를 단일 컬렉션에 쓰면 동일한 결과를 얻을 수 있습니다. 따라서
A
에서 M/R을 먼저 수행 한 다음 출력을 반복하고B
의 데이터로 업데이트하면 별도의 스크립트/프로세스가됩니다.
나는 두 옵션을 모두 사용했습니다. 나는 심지어 두 부분을 동시에 처리하는 간단한 for
루프로 변환 된 # 2를 보았다. 성공적으로 일부 M/R 작업을 간단한 for
루프 및 upserts로 교체했습니다.
2
샤드 설정에서 깨질 수 있기 때문에 불가능합니다. 지도/축소는 호출 된 콜렉션 만 사용할 수 있습니다.
다른 컬렉션에 액세스하는 것은 Mongo 2.4에서 로컬로조차 작동하지 않습니다. mapReduce가 다른 콜렉션에 액세스 할 수있는 기능이 제거되었습니다. [릴리스 정보] (http://docs.mongodb.org/manual/release-notes/2.4/#additional-limitations-for-map-reduce-and-where-operations)를 참조하십시오. – jbyler