2012-08-08 4 views
0

나는() (찾기), 어떻게 충전 사용자 이름 "X"

사용자 MongoDB를 두 컬렉션을 가지고있다 모든 작업을받을 수 있나요()) :

{ 
    "_id" : ObjectId("50215d09ddf7410905000000"), 
    "name" : "Projeto X", 
    "local" : "/home/server/compartilhamento/htdocs/project_x/", 
    "permissions" : [ 
      { 
        "user" : "5021314e372c50859ced7063", 
        "alter" : true, 
        "view" : true, 
        "delete" : true, 
        "view_task" : true, 
        "insert_task" : true, 
        "alter_task" : true, 
        "delete_task" : true 
      }, 
      { 
        "user" : "50213180372c50859ced7064", 
        "alter" : true, 
        "view" : true, 
        "delete" : false, 
        "view_task" : false, 
        "insert_task" : false, 
        "alter_task" : false, 
        "delete_task" : false 
      } 
    ], 
    "tasks" : [ 
      { 
        "responsible" : "5021314e372c50859ced7063", 
        "description" : "Ajuste na barra lateral do site" 
      }, 
      { 
        "responsible" : "5021314e372c50859ced7063", 
        "description" : "Ajuste no cabeçalho do site" 
      }, 
      { 
        "responsible" : "50213180372c50859ced7064", 
        "description" : "Ajuste no rodapé do site" 
      } 
    ] 

은}

나는 프로젝트의 findOne() 컬렉션을 보여 주었다, 그러나 나는()도 발견 될 것이라고 궁금해.

요금이 사용자 이름 "vinixhenri"인 모든 작업을 수행하려면 어떻게해야합니까? 사용자 식별자는 tasks-> responsible입니다.

_id 사용자를 계속 지키고 있는지 궁금합니다. 올바른 사용자 정보를 참조한 다음 프로젝트 정보에 대해 데이터베이스를 다시 쿼리해야합니까? 또는 컬렉션의 사용자 작업에 대한 정보를 복제해야합니까?

답변

0

가장 appropiate 방법 (당신이 가진 것 : https://jira.mongodb.org/browse/SERVER-828 또는 집계 프레임 워크)를 2.2까지 다음 "충전"의 하나 이상의 작업에

  • 반환 모든 루트 문서가 될 것입니다 특정 사용자가 클라이언트 측에서 필터링하여 해당 사용자와 관련된 프로젝트 전체에서 실제로 작동 할 수있는 작업 만 가져옵니다.

  • MR을 실행하십시오 (권장하지 않음). 그렇게되면, 필요할 때마다 문서를 원하는 형식으로 다시 포맷하십시오.

참고 : MR은 실시간이 아니지만 클라이언트 측에서 실시간으로 필터링 할 수 있으므로 개인적으로 클라이언트 쪽에서 필터링하도록 선택할 것입니다.

나는 _id 사용자를 계속 지키고 있는지 궁금합니다. 맞습니다. 사용자 정보를 참조한 다음 프로젝트 정보로 데이터베이스를 다시 쿼리해야합니까? 또는 컬렉션의 사용자 작업에 대한 정보 을 복제해야합니까?

예 괜찮습니다. 예를 들어, 사용자가 자신의 사용자 이름을 변경한다고해서 사용자 이름을 변경하는 모든 프로젝트 문서를보고 싶지는 않습니까? 모든 정보 업데이트를 검색하는 외부 행을 쿼리하는 데 비용이 들지만 이점도 있습니다. 이 경우 사용자 데이터를 프로젝트 문서에 복제하는 것은 좋지 않습니다.

+0

Map/Reduce를 사용하여 현재 위치에서 컬렉션을 업데이트 할 수는 없습니다. 몇 가지 흥미로운 재귀 적 슬픔을 허용합니다. :) 기존 출력 컬렉션에 병합 할 수도 있습니다. [Map/Reduce output options] (http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Outputoptions)를 참조하십시오. – Stennie

+0

@Stennie 실제로 MR은 다른 콜렉션으로 출력해야하고, 그 부분은 남겨 둡니다. – Sammaye