2012-04-26 4 views
0

글쎄, 나는 집계 문제로 어려움을 겪고있다. 문제를 해결하는 가장 쉬운 방법은 map reduce를 사용하거나 별도의 쿼리를 찾은 다음 비동기 라이브러리 도움말을 반복하는 것입니다.mongodb에서 데이터 집계,지도 축소 또는 다른 방법?

는 스키마는 여기에 있습니다 : 그런데 가장 큰 문제는 시리즈 [0] .DATA 배열이 이루어진 것을

data = { 
    categories: [ 'keyword1', 'keyword2', 'keyword3' ], 
    series: [ 
     { 
      name: 'google', 
      data: [33, 43, 22] 
     }, 
     { 
      name: 'yahoo', 
      data: [12, 5, 3] 
     } 

    ] 
} 

:

db.keyword 
keyword: String 
start: Date 
source: String(Only one of these (‘google’,’yahoo’,’bing’,’duckduckgo’)) 
job: ref db.job 
results: [ 
    { 
      title: String 
      url: String 
      position: Number 
    } 
] 


db.job 
name: String 
keywords: [ String ] 
urls: [ String ] 
sources: [ String(‘google’,’yahoo’,’bing’,’duckduckgo’) ] 

지금 내가이 양식에 데이터를 취할 필요 db.job.urls를 db.keyword.results.url과 비교 한 다음 위치를 얻습니다. 검색어를 단순화 할 수있는 방법이 있습니까? 많은 맵 축소 예제를 살펴 보았지만 맵핑 할 데이터와 줄이려는 데이터의 올바른 방법을 찾을 수 없습니다.

+0

나는 이것을 받아 들일 양식을 이해하지 못합니다. 출력에 "데이터"배열이란 무엇입니까? 모든 키워드의 모든 결과를 하나의 문서에 넣으려고합니까? 여러 컬렉션간에 MapReduce를 수행 할 수는 없습니다. – kristina

+0

글쎄, 함수 범위는 어떨까요? 맵 내부의 외부 변수에 액세스하고 함수를 줄일 수 있습니까? –

+0

"scope"매개 변수에 의해서만 전달됩니다. – kristina

답변

2

마치 두 개의 별도 모음 (키워드 및 작업)의 데이터를 결합하려는 것처럼 보입니다.

지도 Reduce와 새로운 Aggregation Framework는 한 번에 하나의 컬렉션에서만 작동 할 수 있습니다.

아마도 가장 좋은 방법은 각 컬렉션을 개별적으로 쿼리하고 프로그래밍 방식으로 결과를 결합하여 응용 프로그램에 가장 적합한 형식으로 저장하는 것입니다.

Map Reduce를 실험하려면 증분 맵 축소 작업을 사용하여 두 개의 컬렉션의 값을 결합한 사용자가 작성한 블로그 게시물에 대한 링크가 있습니다. 이 http://www.mongodb.org/display/DOCS/MapReduce (증분지도 감소에 관한 부분은 여기에 있습니다 : : http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-IncrementalMapreduce)

이 몇 가지 추가지도의 예를 줄일 수 있습니다
지도 MongoDB를 함께 줄 사용에 대한 자세한 내용은 http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/

의 몽고 문서를 참조하십시오 MongoDB의 요리 책 :지도 작업을 줄일 수 방법에 대한 단계별 연습을 위해 http://cookbook.mongodb.org/

이 실행됩니다, 최대 및 최소 V 찾기 "를 MongoDB의 요리 책 레시피의"엑스트라 "절을 참조하십시오 버전이 적용된 문서들에 대한 설명 "http://cookbook.mongodb.org/patterns/finding_max_and_min/

위의 내용을 통해 원하는 결과를 얻는 방법에 대한 아이디어를 얻을 수 있기를 바랍니다. 앞서 언급했듯이 가장 간단한 해결책은 결과를 프로그래밍 방식으로 결합하는 것입니다. 그러나이 작업을 수행하는 Map Reduce 작업을 성공적으로 작성한 경우 커뮤니티가 사용자 경험을 활용할 수 있도록 솔루션을 게시하십시오.

+0

해답을 설명해 주셔서 감사합니다. 이미 한 가지 해결책은 데이터를 프로그래밍 방식으로 정리하는 것입니다. 이것은 데이터를 쉽게 결합하지 않는 비동기식 쿼리와 같은 다른 문제를 야기합니다 (코드 흐름 제어를 위해 비동기식을 사용합니다). –

+0

jurka, jQuery nodejs에 대한 지연은 많은 비동기 호출을 관리하기 쉽게 만듭니다. http : //techishard.wordpress.com/2012/05/29/making-mongoose-keep-its-its-server / – grantwparks

관련 문제