2011-11-22 3 views
0
예를 들어

에서 SQL 서버와 같은 가입 할, 우리는 내가 하루에 20 개 이상의 표가있는 모든 사용자의 이름의 보고서를 필요로 두 개의 컬렉션을 이가 MongoDB를

users {userId, firstName, lastName}

votes {userId, voteDate}

이 .

MongoDB에서 데이터를 가져 오기 위해 쿼리를 작성하려면 어떻게해야합니까?

+0

가능한 복제본 [MongoDB에서 SQL Join 동등 물을 수행하려면 어떻게합니까?] (http://stackoverflow.com/questions/2350495/how-do-i-perform-the-sql-join-equivalent-in- mongodb) –

답변

0

지금 더 정확한 답변을 드릴 수는 없지만 MapReduce를 사용하여이 문제를 해결할 수 있어야합니다. Map 단계는 20 개 이상의 표를 가진 사용자의 userIds를 반환합니다. 줄이면 firstName과 lastName이 반환됩니다. 내 생각에는 ... 모양이 here입니다.

2

가장 쉬운 방법은 사용자 문서의 각 사용자에 대한 투표 수를 캐시하는 것입니다. 그런 다음 단일 쿼리로 대답을 얻을 수 있습니다.

매핑을 원하지 않으면 결과를 결과 컬렉션으로 축소하고 해당 컬렉션을 쿼리하십시오. 그런 다음 결과를 최신으로 유지하기 위해 새 표를 계산하는 증분 맵 축소를 실행할 수 있습니다. http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-IncrementalMapreduce

2

Mongo와의 조인을 실제로해서는 안됩니다. 스키마를 관계형으로 설계 한 경우

이 예제에서는 사용자에게 포함 된 문서로 투표를 저장합니다.

임베디드 문서를 사용하는 일부 시나리오에서는 가능하지 않습니다. 그런 상황에서 두 개의 데이터베이스 쿼리를 수행하고 MapReduce를 사용하는 대신 클라이언트에서 결과를 조인합니다.