2017-02-11 1 views
0

mongodb가 조인을 지원하지 않아 다양한 비즈니스 컬렉션, 서비스 및 사용자를 검색해야하므로 솔루션을 제안했지만 필자는이를 검증해야하고/또는 개선.참조 된 여러 컬렉션에서 mongo로 텍스트 찾기

계획의 흐름은 다음과 같이 보일 것이다 :

Business = Schema({ 
    name:String 
    services:[{ 
    type:ObjectId, 
    ref:'Services' 
    }], 
    specialist:[{ 
    type:ObjectId, 
    ref:'User' 
    }] 
}) 

User = Schema({ 
    full_name:String 
    businesses:[{ 
    _id:{ 
     type:ObjectId, 
     ref:'Business' 
    }, 
    name:String, 
    role:String, 
    is_owner:Boolean 
    }] 
}) 

Service = Schema({ 
    name:String, 
    business:{ 
    type:ObjectId, 
    ref:'Business' 
    }, 
    specialist:[{ 
    type:ObjectId, 
    ref:'User' 
    }] 
}) 

Search = Schema({ 
    text:{ 
    type:String, 
    index:'text' 
    }, 
    business:{ 
    _id:{ 
     type:ObjectId, 
     ref:'Business' 
    }, 
    name:String 
}, 
services:[{ 
    _id:{ 
    type:ObjectId, 
    ref:'Service' 
    }, 
    name: 
}], 
specialist:[{ 
    _id:{ 
    type:ObjectId, 
    ref:'User' 
    }, 
    full_name:String 
}] 
}) 

기업은 서비스 전문가에 의해 수행, 모든 시간이 비즈니스 전문가를 추가하는 서비스를 제공하고, 사용자는 자신의 데이터에 새로운 사업을해야합니다 구체적인 역할을 맡았습니다.

비즈니스를 만들 때 검색에서 문서를 만들고 비즈니스에서 전문가에게 할당 한 서비스를 만들면 검색 컬렉션에 문서가 추가됩니다. 이 문서의 각 수정에서 텍스트 필드는 비즈니스 이름, 서비스 및 전문가의 연결로 업데이트되며 텍스트로 색인 된 검색을 수행 할 단일 모음을 갖습니다. 찾고있는 분야는 비즈니스가됩니다.

누구나 모델 및 검색 할 공통 컬렉션의 솔루션에 대한 제안 사항이 있습니다.

답변

0

버전 3.2의 새로운 내용 $lookup (aggregation)을 확인하십시오.

은 좌측 외측이 처리 콜렉션 "결합"의 문서에 필터링 같은 데이터베이스에 unsharded 컬렉션에 조인을 수행. $ 조회 단계는 입력 문서의 필드와 "조인"문서의 필드가 일치하는지 확인합니다.

그런데 문서 데이터베이스의 장점은 많은 조인을 제거한다는 것입니다. 관련 정보는 MongoDB 쿼리 언어를 통해 빠른 쿼리 액세스를 위해 함께 저장됩니다.이 데이터 모델을 사용하면 계층 적 관계를 표현하고 배열을 저장하며 다른 복잡한 구조를 쉽게 작성할 수 있습니다. 그래서 MongoDB 스키마를 설계 할 때 가능한 한 많은 문서를 하나의 문서에 배치해야한다고 제안합니다.

자세한 내용은 MongoDB relationships: embed or reference?에서 확인할 수 있습니다.

희망이 도움이됩니다.