2014-09-08 3 views
0

최근에 MongoDB에서 연구를 시작했고 시스템에있는 엔티티 간의 관계를 어떻게 더 잘 이해하지 못했습니다.MongoDB에서 관계를 모델링하는 방법은 무엇입니까?

SQL에서 이러한 관계를 만들기 위해 익숙해 진 것처럼, NoSQL 방식으로 생각하는 로직을 변경하면 다소 혼란 스럽습니다.

MongoDB는 임베디드 및 참조 된 모델링 유형이 있습니다. 내가 올바른 이해한다면

는, 참조 된 우리가 SQL에서와 같다 :

  • :

  • 는 사용자 및 주소와 같은 엔티티를 표현하기 위해 두 개의 테이블을 생성 한-에-N

    .

    • 만들기 :

    • 사용자 개체

    { 
        "_id":ObjectId("52ffc33cd85242f436000001"), 
        "contact": "987654321", 
        "dob": "01-01-1991", 
        "name": "Tom Benzamin", 
        "address_ids": [ 
         ObjectId("52ffc4a5d85242602e000000"), 
         ObjectId("52ffc4a5d85242602e000001") 
        ] 
    } 
    

    그리고 내장에 주소 ID를 넣어 사용자의 응답 객체와 주소 객체

  • 만들기 하나의 테이블,이 경우 사용자 .

  • 사용자 개체를 만들고 그 안에 주소 객체 넣어 :

{ 
    "_id":ObjectId("52ffc33cd85242f436000001"), 
    "contact": "987654321", 
    "dob": "01-01-1991", 
    "name": "Tom Benzamin", 
    "address": [ 
     { 
     "building": "22 A, Indiana Apt", 
     "pincode": 123456, 
     "city": "Los Angeles", 
     "state": "California" 
     }, 
     { 
     "building": "170 A, Acropolis Apt", 
     "pincode": 456789, 
     "city": "Chicago", 
     "state": "Illinois" 
     }] 
} 

그래서를, 내 질문은 :

이되는 NoSQL 데이터베이스 등 최고의 기능을 사용하려면 MongoDB, 임베디드 모델링을 사용해야합니까?

임베디드 모델링에서는 테이블을 만들지 않았기 때문에 단지 하나의 엔티티 만 만들고이 경우 주소 개체 인 내부 엔티티에는 ID가 없습니다.

+1

가장 쉬운 방법은 응용 프로그램에서이 데이터에 액세스하는 방법을 생각하는 것입니다. 'user' 안에'address'를 넣기를 원할 것입니다. 사용자를 불러올 때 응용 프로그램에서 관련 주소 객체를 모두 원한다면 MongoDB에서 지원되지 않는 조인 (join)이 필요 없습니다. . –

답변

1

당신은 MongoDB에 맞습니다. 데이터를 저장하는 두 가지 방법이 있습니다. 가장 좋은 방법은 필요한 것에 달려 있습니다.

주소 개체를 다른 곳에 사용하려면 다른 테이블에 넣고 그렇지 않으면 개체에 직접 넣을 수 있습니다.

NodeJS와 함께 MongoDB를 사용하는 경우 MongooseJS를 사용할 수 있습니다. 이것은 여러분의 mongodb 객체를위한 스키마를 정의하는 특유의 프레임 워크입니다. 임베드 된 모든 오브젝트에 대해 오브젝트 ID를 추가하기 때문에 임베디드 오브젝트와 함께 미세하게 작동합니다.

+0

이 NodeJS에 대해서는 아무 것도 모른다 : /. 나는 그것에 대해 뭔가를 찾아 볼 것이다. 필자의 지식을 확인하기 위해 : embedeed 된 오브젝트가 다른 콜렉션에 나타나지 않을 때 임베디드 모델링을 사용합니다.따라서이 경우 Address는 좋은 예가 아닙니다. 왜냐하면 나는 다른 여러 컬렉션에서 사용할 수 있기 때문입니다. 맞습니까? – Murilo

+1

죄송합니다. 다른 답을 예로 들어 보겠습니다. – T00rk

+1

죄송합니다. 오늘부터 의견을 보낼 수있는 권한이 없습니다. 어제 말했듯이 어쩌면 가장 좋은 방법은 다음과 같이 주소 개체를 분할하는 것입니다. http://pastebin.com/fKeeP2mD – T00rk

관련 문제