Docs Menu
Docs Home
/ /
Atlas App Services
/

관계

이 페이지의 내용

  • 개요
  • 카디널리티
  • To-One
  • To-Many
  • 내장된 객체 관계
  • 다른 컬렉션에 내장된 객체
  • 목록에 내장된 객체
  • 관계 정의
  • 스키마 정의
  • 새 관계 만들기
  • 관계 구성
  • 관계 배포

관계는 두 문서 사이의 연결입니다. 관계를 사용하면 문서가 별도의 데이터베이스나 컬렉션에 있는 경우에도 읽기 및 쓰기 작업에서 관련 문서를 참조하고 쿼리할 수 있습니다.

소스 MongoDB 컬렉션에서 관계를 정의하고 외부 컬렉션의 문서에 연결합니다. Atlas App Services는 소스 필드의 값을 참조하는 외부 문서로 대체하여 동기화된 SDK 데이터 모델의 관계를 자동으로 확인합니다.

관계는 단방향이며 고유성이나 기타 외부 키 제약 조건을 적용하지 않습니다. 소스 필드에서 존재하지 않는 외부 값을 참조하는 경우 App Services는 확인된 관계에서 참조를 자동으로 생략합니다.

예시

두 개의 컬렉션이 있는 애플리케이션을 예로 들어 보겠습니다:

  • accounts 컬렉션에는 각각 고객 계정을 설명하는 문서가 포함되어 있습니다.

    계정 컬렉션 스키마
    {
    "title": "Account",
    "properties": {
    "_id": { "bsonType": "objectId" },
    "account_id": { "bsonType": "string" },
    "products": {
    "bsonType": "array",
    "items": { "bsonType": "string" }
    },
    ...
    }
    }
  • customers 컬렉션에는 각각 하나 이상의 계정을 가질 수 있는 단일 고객을 설명하는 문서가 포함되어 있습니다. customers 컬렉션의 모든 문서에는 고객에게 적용되는 accounts 컬렉션의 모든 account_id 값의 배열이 포함된 accounts 필드가 있습니다.

    고객 컬렉션 스키마
    {
    "title": "Customer",
    "properties": {
    "username": { "bsonType": "string" },
    "accounts": {
    "bsonType": "array",
    "items": { "bsonType": "string" }
    },
    ...
    }
    }

앱은 customers 컬렉션에서 이 관계를 정의합니다. accounts 필드에 저장된 계정 ID 값 배열에서 accounts 컬렉션에 있는 각 문서의 account_id 필드를 가리킵니다.

{
"accounts": {
"ref": "#/relationship/mongodb-atlas/sample_analytics/accounts",
"foreign_key": "account_id",
"is_list": true
}
}

이 관계 가 정의되면 App Services 는 클라이언트 쿼리에서 고객과 해당 고객의 모든 계정을 반환할 수 있습니다. 관계 가 없으면 쿼리는 전체 Account 객체 대신 account_id 값 목록만 반환합니다.

관계의 카디널리티에 따라 참조할 수 있는 외부 문서의 수가 결정됩니다. App Services는 'to-one' 및 'to-many', 이렇게 두 가지 관계 카디널리티를 지원합니다.

'to-one' 관계는 각 소스 문서를 단일 문서 또는 외부 컬렉션의 문서 배열과 연결합니다.

관계에 'to-one' 카디널리티가 있음을 나타내려면 is_listfalse로 설정합니다.

data_sources/mongodb-atlas/example/pets/relationships.json
{
"owner": {
"ref": "#/relationship/mongodb-atlas/example/people",
"foreign_key": "_id",
"is_list": false
}
}

App Services는 SDK 모델에서 소스 값을 참조된 개체 또는 null 값으로 자동 대체합니다.

{
"name": "Pet",
"properties": {
"name": "string",
"owner": "Person"
}
}
{
"name": "Person",
"properties": {
"name": "string"
}
}

'to-many' 관계는 각 소스 문서를 외부 컬렉션의 문서 목록과 연결합니다.

관계에 'to-many' 카디널리티가 있음을 나타내려면 is_listtrue로 설정합니다:

data_sources/mongodb-atlas/example/people/relationships.json
{
"pets": {
"ref": "#/relationship/mongodb-atlas/example/pets",
"foreign_key": "_id",
"is_list": true
}
}

App Services는 SDK 모델에서 소스 값을 참조된 개체 또는 null 값으로 자동 대체합니다.

{
"name": "Pet",
"properties": {
"name": "string"
}
}
{
"name": "Person",
"properties": {
"name": "string",
"pets": "Pet[]"
}
}

내장된 객체는 외부 컬렉션과 관계를 가질 수 있습니다. 점 표기법을 사용하여 내장된 객체의 속성에 액세스합니다.

내장된 객체는 외부 컬렉션의 객체와 관계를 가질 수 있습니다.

{
"title": "Person",
"properties": {
"_id": { "bsonType": "objectId" },
"pet": {
"bsonType":"object",
"properties": {
"favoriteToyBrand": { "bsonType": "objectId" }
}
}
// ...additional model properties
}
}

점 표기법을 사용하여 외부 컬렉션과 관계가 있는 내장된 객체 속성을 지정합니다. 그런 다음 외부 컬렉션 세부 정보 및 외부 키 필드를 지정할 수 있습니다.

{ "pet.favoriteToyBrand":
{
"ref": "#/relationship/mongodb-atlas/example/ToyBrand",
"foreign_key": "_id",
"is_list": false }
}

목록 속성 내에 내장된 객체는 외부 컬렉션과 관계를 가질 수 있습니다.

{
"title": "Person",
"properties": {
"_id": { "bsonType": "objectId" },
"pets": {
"bsonType":"array",
"items": {
"bsonType": "object",
"properties": {
"favoriteToyBrand": { "bsonType": "objectId" }
}
}
}
// ...additional model properties
}
}

목록에 포함된 내장된 객체 속성에 액세스하려면 field1.[].field2 를 사용합니다(예: pets.[].favoriteToyBrand). 여기에서 외부 컬렉션 세부 정보 및 외부 키 필드를 지정할 수 있습니다.

사전과 세트에 동일한 구문 사용

사전 및 세트 내에서 관계를 생성할 때 이와 동일한 field1.[].field2 구문을 사용할 수 있습니다.

{
"pets.[].favoriteToyBrand": {
"ref": "#/relationship/mongodb-atlas/example/ToyBrand",
"foreign_key": "_id",
"is_list": false
}
}

참고

관계 내 기본(Primitives) vs 목록, 사전 및 세트

위의 예에서는 is_list 가 false로 설정되어 있습니다. 여기서 관계 string 의 끝에 있는 필드는 목록이 아닌 기본 필드입니다. 내장된 객체가 목록에 포함 되어 있지만 favoriteToyBrand 속성 자체는 사전, 집합 또는 목록이 아닙니다.

관계를 정의할 때는 이러한 제한 사항을 염두에 두세요:

  • 참조(소스) 필드는 _id수 없습니다 .

  • 참조(소스) 필드는 required 필드일 수 없습니다 .

  • Device Sync를 사용하는 경우 외부 키는 외부 컬렉션의 _id 필드 여야 합니다 .

1

관계를 정의하려면 소스 컬렉션과 외부 컬렉션 모두에 대해 정의된 스키마가 있어야 합니다. 스키마를 정의하는 방법을 알아보려면 스키마 정의 및 적용을 참조하세요.

2

스키마와 함께 연결된 MongoDB 데이터 소스에서 컬렉션에 대한 관계를 정의합니다.

새 관계를 만들려면:

  1. 왼쪽 탐색 메뉴에서 Schema를 클릭합니다.

  2. Collections 탭에서 소스 컬렉션을 선택합니다.

  3. View 을 JSON 보기로 + Add Relationship 전환하고 을 클릭합니다.

새 관계 를 만들려면 소스 컬렉션의 relationships.json 파일 에 관계 구성 객체 를 추가합니다.

{
"<source field>": {
"ref": "#/relationship/<data source>/<db>/<collection>",
"foreign_key": "<foreign field>",
"is_list": <boolean>
}
}
3

관계 정의는 소스 컬렉션 스키마의 참조 필드 외부 컬렉션 스키마 있는 동일한 유형의 외부 필드로 매핑합니다.

관계를 구성합니다:

  1. 관계가 매핑되는 소스 컬렉션의 필드를 지정합니다. 이를 UI에서는 상위 항목 이라고 합니다.

  2. 소스 필드에 매핑할 외부 데이터베이스, 컬렉션 및 외부 컬렉션의 필드를 지정합니다. 이를 UI에서는 연결된 라고 합니다. Device Sync를 사용하는 경우 연결된 필드가 _id 이어야 합니다 .

  3. Add를 클릭합니다.

관계를 구성하려면 relationships.json 에서 소스 필드 이름을 루트 수준 필드로 지정한 다음 필드 값에 다음 구성 옵션을 추가합니다.

  • 다음 형식을 사용하여 ref 필드 에 외부 컬렉션 을 지정합니다.

    #/relationship/<data source>/<db>/<collection>
  • foreign_key 필드에 일치시킬 필드를 지정합니다. Device Sync를 사용하는 경우 이 값이 _id 이어야 합니다 .

  • 소스 필드 에 배열 이 포함된 경우 is_listtrue 로 설정하다 하고, 그렇지 않으면 false 로 설정하다 합니다.

4

Save 을 클릭한 다음 업데이트된 애플리케이션을 배포합니다.

관계 구성 파일을 저장하고 변경 사항을 푸시하여 배포합니다.

appservices push

돌아가기

스키마 데이터 유형