2010-05-23 5 views
0

저는 MongoDB를 처음 접했고 수년간 RDBMS를 사용해 왔습니다.MongoDB, mongomapper 및 조인 주위에 머리를 감싸기

어쨌든, 나는 다음 컬렉션이 있다고 가정 해 봅시다 :

 
Realtors 
many :bookmarks 
key :name 


Houses 
key :address, String 
key :bathrooms, Integer 


Properties 
key :address, String 
key :landtype, String 


Bookmark 
key :notes 

나는 부동산 즐겨 찾기에 하우스 및/또는 속성 수 있어야합니다. 주택 및 부동산은 독립형이며 부동산 중개인이나 북마크에 대해 전혀 알지 못합니다. 나는 북마크를 MySQL에서 "조인 테이블"과 같은 종류로 만들고 싶다.

주택/속성은 다른 출처에서 가져온 것이므로 수정할 수 없습니다.

나는 레일에서이 작업을 수행 할 수 있도록하고 싶습니다

:

r은 = Realtor.first r.bookmarks 나에게 줄 것이다 :

하우스 1 하우스 2 PropertyABC PropertyOO1 등 ...

수천 개의 주택 및 속성이 있습니다.

나는 이것이 RDBMS를 위해 만들어진 것이라고 알고 있습니다. 그러나 MongoDB를 사용하는 데에는 몇 가지 이유가 있으므로이 작업을하고 싶습니다.

이렇게하는 방법에 대한 제안은 감사하겠습니다.

감사합니다.

답변

2

확인을 클릭합니다. 마치 RDBMS 인 것처럼 데이터를 구조화했습니다. 심지어 Mongo에서 유용한 것처럼 "도망 테이블"을 만들었습니다.

귀하의 질문에 대한 간단한 대답은 주어진 "책갈피"를로드하기 위해 "첫 번째"를 다시 정의해야한다는 것입니다. $ in 절이있는 "서버 측"또는 큰 for 루프가있는 "클라이언트 측".

그래서 데이터에 대한 두 가지 큰 질문 :

  1. 책갈피가 완전히 부동산에 속하는 경우, 왜 그들은 자신의 컬렉션입니까?
  2. 부동산 중개인이 속성을 북마크함에 따라 다른 컬렉션에있는 이유는 무엇입니까? 이 불필요한 합병증이 아닌가? 당신이 Realtor.first와 같은 것을 북마크에 원한다면 왜 다른 컬렉션에 넣을까요?

부동산 수집은 아마 다음과 같이 항목으로 구성되어야한다 : 나는 재산의 집의 ID와 ID에 대한 차별화 된 "H"와 "P"를했습니다 방법

{"name":"John", "bookmarks": [ 
    {"h":"House1","notes":[{"Nice location","High Ask"}] }, 
    {"p":"PropertyABC","notes":[{"Haunted"}] } 
] } 

주 ? 네가 내 다음 제안을한다면 너는 그것도 필요로하지 않을 것이다.

이 한 걸음 더 나아가서, 당신은 아마 집과 재산이 동일한 수집, 말 "위치"에서 원할 것입니다. "Locations"컬렉션에서 모든 하우스 및 속성을 채우고 "유형": "하우스"또는 "유형": "속성"으로 표시합니다. 그런 다음 "유형"필드에 대해 색인을 생성합니다.

왜?이제 "첫 번째"방법을 쓸 때 쿼리가 매우 쉽습니다. 모두 "북마크"를 반복하고 "위치"컬렉션에서 적절한 키 ("House1", "PropertyABC")를 가져옵니다. 페이징은 간단합니다. 10 개 항목을 쿼리 한 다음 반환합니다.

나는 어떤 수준에서 절름발이의 종류를 보이는 것을 알고있다. "을 내가 데이터를 잡기 위해 루프를 쓰고 있어요 왜? 나는! 15 년 전에 것을 그만하려고"그러나 몽고는있는 "문서 지향" 저장하므로 개별 문서로드에 최적화되어 있습니다. 한 무리의 문서를로드하려고하므로이 작은 후프를 뛰어 넘어야합니다.

다행히도, 나쁘지는 않습니다. Mongo는 입니다. 실제로는 개별 문서를 로딩 할 때 빠릅니다. 한 번에 10 개의 항목을 가져 오는 쿼리를 실행하면 여전히 매우 빨라질 것입니다.

+0

팁 주셔서 감사합니다. 나는 내 설계 과정을 다시 생각하고 갈 길이 멀었다. 나는 House_Ids의 배열을 유지하는 것과 같은 것으로 향하고있다. (정적이기 때문에 아주 조금씩 변한다.) 다른 모든 것들을 포함한다. 이것은 MongoDB의 목적을 깨지 않으면 서 내가 느낀 "관계형"특성을 제공합니다. – cbmeeks

+0

이와 같은 작업을 수행하면 원하는 것을 얻을 수 있습니다. "집"또는 "속성"을 포함하지 않지만 동일한 컬렉션에 보관하면 "책갈피 검색"이 훨씬 쉬워집니다. { "이름": "John", "북마크": [{ "h": ref, "메모":{ "h ": ref,"notes ": [{"Haunted "}]} }} –

관련 문제