2013-07-30 4 views
0

게시물 관련 정보 및 작성자 정보를 저장하는 posts 컬렉션이 있습니다. 이것은 중첩 된 트리입니다. 그런 다음 특정 포스트를 위 또는 아래로 평가 한 사용자를 저장하는 포스트 레이팅 콜렉션이 있습니다.mongodb - 다른 컬렉션의 값을 기반으로 하나의 컬렉션에 열 찾기

특정 게시물에 대해 중첩 된 트리를 요청하는 경우 현재 사용자가 투표 한 경우 반환해야하며, 그렇다면 각 게시물의 위 또는 아래가 반환됩니다.

SQL에서 이것은 "posts. *, postrating.vote는 postID 및 postrating.memberID = currentUser에 postrating에 참여합니다"와 같은 형태가됩니다.

MongoDB는 조인을 지원하지 않습니다. MongoDB에 대한 나의 선택은 무엇입니까?

  1. 간단한 쿼리를 사용하면지도를 줄일 수 있습니까?
  2. 포스트에있는 등급 - BSON 크기 제한을 저장 하시겠습니까?
  3. 모든 필수 게시물 목록을 가져옵니다. 현재 사용자의 모든 투표 목록을 가져옵니다. 게시물에 대한 루프 및 사용자가 투표에 추가 한 내용을 출력하려면?

다른 방법이 있습니까? 집계를 사용하여이를 수행 할 수 있습니까?

참고 : 지난 주 MongoDB에서 작업을 시작했습니다.

답변

0

MongoDB에서 가장 간단한 방법은 응용 프로그램 측 논리에서이를 처리하고 단일 쿼리에서이 작업을 시도하지 않는 것입니다. 이 데이터를 구조화하는 방법에는 여러 가지가 있지만 여기에 하나의 가능성이다 :

user_document = { 
    name : "User1", 
    postsIhaveLiked : [ "post1", "post2" ... ] 
    } 

post_document = { 
    postID : "post1", 
    content : "my awesome blog post" 
    } 

이 구조로, 당신하고자 사용자의 user_document에 대한 첫 번째 쿼리. 그런 다음 반환 된 각 게시물에 대해 해당 게시물의 postID이 해당 사용자의 "postsIhaveLiked"목록에 있는지 확인할 수 있습니다.

주요 아이디어는 데이터를 두 단계가 아닌 하나의 단계로 가져 오는 것입니다. 이는 조인과는 다르지만 하나의 키 (이 경우, postID)를 사용하여 서로 다른 두 개의 데이터를 관련시키는 것과 동일한 기본 아이디어를 기반으로합니다.

일반적으로 성능상의 이유로 map-reduce를 사용하지 마십시오. 이 간단한 사용 사례의 경우 집계가 원하는 것이 아닙니다.

+0

비슷한 방식으로 구현했습니다. – MavWolverine

관련 문제