2014-07-07 2 views
0

Parse 백엔드가있는 Node/Express에 "Yelp for Dorm rooms"웹 응용 프로그램을 다시 작성합니다 (PHP 버전 here).중첩 포인터로 쿼리 하시겠습니까?

나는 매우 SQL 데이터베이스에 사용하고 있기 때문에

, 나는 네 테이블로 내 데이터를 조직 한 일대 포인터 : 모든 객실은 홀에 대한 포인터를 가지고

Rooms 
Halls 
Clusters 
Campuses 

각 홀에 대한 포인터를 가지고 (작은 그룹의 홀)과 각 클러스터에는 캠퍼스에 대한 포인터가 있습니다.

그러나 각 홀/클러스터/캠퍼스에는 고유 한 문화가 있기 때문에 각 수준별로 검색 할 수 있기를 원합니다 (예 : 사우스 캠퍼스 또는 Norris Hall에서 살고 싶음). 그러나 포인터가 세 단계 깊숙이 중첩되어 있기 때문에 캠퍼스를 검색하고 방을 반환하는 데 문제가 있습니다. 나는 데이터를 복제하고 클러스터 및 캠퍼스 데이터를 각 룸 객체에 복사/붙여 넣기해야합니다.

클러스터를 쉽게 검색 할 수 있습니다. 난 그냥 할 수 있습니다

var clusterQuery = new Parse.Query("clusters"); 
clusterQuery.equalTo("cluster", req.params.cluster); 
var hallsQuery = new Parse.Query("halls"); 
hallsQuery.matchesQuery("cluster", clusterQuery); 
query.matchesQuery("hall", hallsQuery); 

그래서 나는 캠퍼스 검색은 단순히

var campusQuery = new Parse.Query("campuses"); 
campusQuery.equalTo("cluster", req.params.campus); 
var clusterQuery = new Parse.Query("clusters"); 
clusterQuery.matchesQuery("campus", campusQuery); 
var hallsQuery = new Parse.Query("halls"); 
hallsQuery.matchesQuery("cluster", clusterQuery); 
query.matchesQuery("hall", hallsQuery); 

그러나 물론, 즉 너무 쉽게 될 것이다하고 생각.

대신 오류가 발생합니다. 154 : 쿼리에 너무 많은 중첩 쿼리가 있습니다.

내 질문에, 전능하신 stackoverflow 커뮤니티 : 대신 무엇을해야합니까?

답변

2

Campuses이 아닌 단명으로 클래스 이름을 지정하는 것이 더 좋습니다. Campus. 그래서 나는 단수로 이름을 지을 것입니다.

모델은 나무 구조이며 일부 패턴이 있습니다. 부모 참조를 유지하는 것은 간단하지만 실현 된 하위 트리에 대해 여러 개의 쿼리가 필요합니다. Parse가 MongoDB를 사용하기 때문에, Product CatalogModel Tree Structures과 같은 MongoDB의 유스 케이스와 모델 패턴을 확인할 수 있습니다.

{_id: "Room1", ancestors: [pointerToAHall, pointerToACluster, pointerToACampus], parrent: pointerToAHall}과 같은 문자가있는 Array of Ancestors pattern을 고려하십시오. ancestors 배열 캠퍼스를 포함하는 경우

당신은 객실을 찾을 수 있습니다 equalToancestors가 배열 인 것을 알고

var query = new Parse.Query("Room"); 
query.equalTo("ancestors", aCampusObject) 

하는 것으로. Parse docs (queries on array)를 확인하고 싶을 수 있습니다.

+0

그건 잘 될거야. 무리 감사. –

+1

그냥 'matchesQuery ('ancestors ', innerQuery)'를 사용하여'ancestors '요소 중 하나가 하위 쿼리 (예 :'Campus '의 이름 검색)와 일치하는 회의실을 필터링 할 수 있습니다. –