문서 메뉴

문서 홈Atlas App Services

MongoDB 데이터 소스 구성 파일

이 페이지의 내용

  • 서비스 구성
  • MongoDB cluster
  • 연합 데이터베이스 인스턴스
  • 데이터베이스 & collection
  • collection 스키마
  • 관계
  • 기본 규칙
  • 컬렉션 규칙
  • 규칙 구성
  • 역할
  • 필터
app/
└── data_sources/
└── <service name>/
├── config.json
└── <database>/
└── <collection>/
├── schema.json
├── relationships.json
└── rules.json
config.json
{
"name": "<Service Name>",
"type": "mongodb-atlas",
"config": {
"clusterName": "<Atlas Cluster Name>",
"readPreference": "<Read Preference>",
"wireProtocolEnabled": <Boolean>
}
}
필드
설명
name
string

필수 사항입니다. 기본값입니다: mongodb-atlas

이 Atlas App Services App 내에서 cluster를 참조하는 데 사용되는 서비스 이름입니다. 이름은 최대 64자까지 입력할 수 있으며 ASCII 문자, 숫자, 밑줄 및 하이픈만 포함할 수 있습니다.

type
string
필수입니다. MongoDB Atlas 클러스터의 경우 이 값은 항상 "mongodb-atlas" 입니다.
config.clusterName
string
필수입니다. Atlas에서의 cluster의 이름입니다.
config.readPreference
string

서비스를 통해 전송된 쿼리에 대한 읽기 설정 (read preference) 모드입니다.

모드
설명
App Services는 모든 읽기 작업을 현재 복제본 세트 프라이머리 노드 로 라우팅합니다. 이는 기본 읽기 설정 모드입니다.
App Services는 사용 가능한 경우 모든 읽기 작업을 현재 복제본 세트 프라이머리 노드 로 라우팅합니다. 자동 페일오버 와 같이 프라이머리 노드를 사용할 수 없는 경우 읽기 요청은 대신 세컨더리 노드 로 라우팅됩니다.
App Services는 모든 읽기 작업을 현재 복제본 세트 세컨더리 노드 중 하나로 라우팅합니다.
App Services는 모든 읽기 작업을 복제본 세트의 사용 가능한 세컨더리 노드 중 하나로 라우팅합니다. 사용할 수 있는 세컨더리가 없는 경우 읽기 요청은 대신 복제본 세트 프라이머리 로 라우팅됩니다.
App Services는 클라이언트에 비해 네트워크 지연 시간이 가장 짧은 복제본 세트 멤버 로 읽기 작업을 라우팅합니다.
config.wireProtocolEnabled
부울
/data_sources/<Service Name>/config.json
{
"name": "<Service Name>",
"type": "datalake",
"config": {
"dataLakeName": "<Federated database instance name>"
}
}
필드
설명
name
string

필수 사항입니다. 기본값입니다: mongodb-datafederation

이 App Services 앱 내에서 연합 데이터베이스 인스턴스를 참조하는 데 사용되는 서비스 이름입니다. 이름은 최대 64자까지 입력할 수 있으며 ASCII 문자, 숫자, 밑줄 및 하이픈만 포함할 수 있습니다.

type
string
필수입니다. 연합 데이터베이스 인스턴스의 경우 이 값은 항상 "datalake" 입니다.
config.dataLakeName
string
필수입니다. Atlas의 연합 데이터베이스 인스턴스의 이름입니다.

컬렉션에 대한 스키마 를 적용하려면 문서에 대한 JSON schema가 포함된 schema.json 구성 파일을 정의하세요. 루트 수준 스키마는 다음 형식을 갖는 객체 스키마 여야 합니다.

/data_sources/<data source>/<database>/<collection>/schema.json
{
"title": "<Object Type Name>",
"bsonType": "object",
"properties": {
"<Property Name>": { <Schema> },
...
}
}
/data_sources/<data source>/<database>/<collection>/relationships.json
{
"<Source Field Name>": {
"ref": "#/relationship/<Data Source Name>/<Database Name>/<Collection Name>",
"source_key": "<Source Field Name>",
"foreign_key": "<Foreign Field Name>",
"is_list": <Boolean>
},
...
}
필드
설명
ref
string

외부 collection을 지정하는 JSON schema $ref 문자열입니다. 문자열의 형식은 다음과 같습니다.

#/relationship/<Data Source Name>/<Database Name>/<Collection Name>
source_key
string
관계에 포함할 외부 collection의 문서를 지정하는 이 collection 스키마의 필드 이름입니다. source_keyforeign_key 필드의 값이 포함되어 있으면 외부 문서가 포함됩니다.
foreign_key
string
source_key 에서 참조하는 값을 포함하는 외부 컬렉션 스키마의 필드 이름입니다.
is_list
부울

true 인 경우 관계가 여러 외부 문서를 참조할 수 있습니다(예: 'to-many' 관계). source_key 필드는 foreign_key 필드와 동일한 유형의 요소가 포함된 배열이어야 합니다.

false 인 경우 관계는 0개 또는 1개의 외부 문서(예: '대일' 관계)를 참조할 수 있습니다. source_key 필드는 foreign_key 필드와 동일한 유형이어야 합니다.

예제

전자상거래 앱은 두 collection 간의 관계를 정의합니다. 즉, store.orders 의 각 문서는 주문의 items 배열에 항목 _id 값을 포함하여 store.items collection에 있는 하나 이상의 문서를 참고합니다. 두 collection 모두 동일한 연결된 클러스터(mongodb-atlas)와 데이터베이스(store)에 있습니다.

관계는 orders collection에 대해 정의되어 있습니다.

/data_sources/mongodb-atlas/store/orders/relationships.json
{
"items": {
"ref": "#/relationship/mongodb-atlas/store/items",
"source_key": "items",
"foreign_key": "_id",
"is_list": true
}
}

더 구체적인 컬렉션 수준 규칙이 정의되지 않은 데이터 소스의 모든 컬렉션에 적용되는 기본 규칙을 정의할 수 있습니다.

data_sources/<data-source-name>/default_rule.json 에 있는 데이터 소스의 default_rule.json 구성 파일에서 기본 규칙을 정의합니다.

/data_sources/<data source>/default_rule.json
{
"roles": [<Role>],
"filters": [<Filter>]
}
필드
설명
roles
Array<Role>
역할 구성의 배열입니다.
filters
Array<Filter>
필터 구성의 배열입니다.

데이터 소스가 연합 데이터 소스가 아닌 경우, collection의 rules.json 구성 파일에서 collection 수준 규칙을 정의할 수 있습니다.

/data_sources/<data source>/<database>/<collection>/rules.json
{
"database": "<Database Name>",
"collection": "<Collection Name>",
"roles": [<Role>],
"filters": [<Filter>]
}
필드
설명
database
string
collection을 보유한 데이터베이스의 이름입니다.
collection
string
컬렉션의 이름입니다.
roles
Role[]
역할 구성의 배열입니다.
filters
Filter[]
필터 구성의 배열입니다.
{
"name": "<Role Name>",
"apply_when": { Expression },
"document_filters": {
"read": { Expression },
"write": { Expression }
},
"read": { Expression },
"write": { Expression },
"insert": { Expression },
"delete": { Expression },
"search": <Boolean>,
"fields": {
"<Field Name>": {
"read": { Expression },
"write": { Expression },
"fields": { Embedded Fields }
},
...
},
"additional_fields": {
"read": { Expression },
"write": { Expression }
}
}
필드
설명
name
string
역할의 이름입니다. 역할 이름은 동일한 컬렉션 내 역할을 식별하고 구분합니다. 100자 이하로 제한됩니다.
apply_when
object

역할 이 사용자에게 적용될 때 참으로 평가되는 표현식 입니다.

Realm Mobile Sync(유연 모드)가 활성화되어 있지 않으면 App Services는 문서별로 역할을 할당합니다. Realm Mobile Sync(유연 모드)가 활성화되면 App Services는 collection별, 세션별로 즉, 클라이언트가 동기화 연결을 열 때 동기화된 각 collection에 대해 역할을 할당합니다.

App Services는 역할을 할당하기 위해 역할이 참으로 평가될 때까지 각 잠재적 역할의 apply_when 를 평가합니다. 잠재적 역할은 지정된 collection의 rules.json 구성 파일에 지정된 역할이거나, 지정된 collection에 대해 rules.json 파일이 없는 경우 기본 역할입니다. App Services는 구성에서 지정한 순서대로 역할을 평가합니다. 일치하는 역할이 없으면 액세스가 거부됩니다. 자세한 내용은 역할 기반 권한을 참조하세요.

Realm Mobile Sync(유연 모드)가 활성화된 경우, 할당된 역할은 동기화와 호환 되어야 합니다. 역할이 동기화와 호환되지 않지만 apply_when 가 참으로 평가되면 다른 역할은 고려되지 않습니다. 액세스가 거부되었습니다.

document_filters
문서
기본값입니다: undefined

역할의 다른 권한을 평가할 수 있는지 여부를 결정하는 읽기 및 쓰기 표현식이 포함된 문서입니다.

Realm Mobile Sync가 활성화된 경우 document_filters.readdocument_filters.write 를 모두 정의해야 역할 동기화 호환 가능 합니다. 동기화와 호환되지 않는 역할은 동기화 요청에 대한 모든 액세스를 거부합니다.

Realm Mobile Sync가 활성화되어 있지 않은 경우 document_filters, document_filters.readdocument_filters.write 는 모두 선택 사항입니다. 정의되지 않은 document_filters.read 또는 document_filters.write 의 기본값은 true이므로 후속 권한을 평가할 수 있습니다.

"document_filters": {
"read": { Expression },
"write": { Expression }
}
document_filters.read
object?
기본값입니다: undefined

read, fields 의 읽기 권한 및 additional_fields 의 읽기 권한을 평가할 수 있는지 여부를 지정하는 표현식 입니다. 거짓인 경우(그리고 document_filters.write 가 정의되지 않았거나 거짓인 경우) 전체 문서에 대한 읽기 액세스가 거부됩니다.

동기화 호환성 을 유지하려면 표현식을 정의해야 하며 쿼리 가능한 필드만 참조할 수 있습니다.

document_filters.write
object?
기본값입니다: undefined

write, fields 의 쓰기 권한 및 additional_fields 의 쓰기 권한을 평가할 수 있는지 여부를 지정하는 표현식 입니다. false인 경우 전체 문서에 대한 쓰기 액세스가 거부됩니다.

동기화 호환성 을 유지하려면 표현식을 정의해야 하며 쿼리 가능한 필드만 참조할 수 있습니다.

read
object?
기본값입니다: undefined

역할에 문서의 모든 필드를 읽을 수 있는 권한이 있는 경우 참으로 평가되는 표현식 입니다.

동기화 호환성 을 유지하려면 표현식이 부울 리터럴( true 또는 false)이어야 합니다.

문서 수준 읽기 권한은 모든 필드 수준 권한보다 우선 순위를 가집니다. 역할에 문서 수준 read 권한이 있는 경우 문서의 모든 필드에 적용됩니다. fields 또는 additional_fields (으)로 지정된 읽기 권한은 문서 수준 read 권한을 재정의하지 않습니다.

필드 수준 규칙과 함께 기본 대체를 정의하려면 read additional_fields 을 사용합니다.

write
object?
기본값입니다: undefined

역할에 문서의 모든 필드를 추가, 수정 또는 제거할 수 있는 권한이 있는 경우 참으로 평가되는 표현식 입니다.

동기화 호환성 을 유지하려면 표현식이 부울 리터럴( true 또는 false)이어야 합니다.

문서 수준 쓰기 권한은 모든 필드 수준 권한보다 우선합니다. 역할에 문서 수준 write 권한이 있는 경우 문서의 모든 필드에 적용됩니다. fields 또는 additional_fields (으)로 지정된 쓰기 권한은 문서 수준 write 권한을 재정의하지 않습니다.

필드 수준 규칙과 함께 기본 대체를 정의하려면 write additional_fields 을 사용합니다.

write JSON 표현식에서 %%root%%prevRoot 과 같은 확장을 사용할 수 있습니다.

중요

암시적 읽기 권한

역할에 특정 범위에 대한 write 권한이 있을 때마다 명시적으로 정의되지 않았더라도 read 권한도 갖게 됩니다.

insert
object?
기본값입니다: true

역할에 새 document를 collection에 삽입할 수 있는 권한이 있는 경우 true 으)로 평가되는 표현식 입니다.

App Services는 삽입 작업에 대해 그리고 역할에 새 문서의 모든 필드에 대한 write 권한이 있는지 확인한 후에만 이 표현식을 평가합니다.

delete
object?
기본값입니다: true

역할에 collection에서 문서를 삭제할 수 있는 권한이 있는 경우 true로 평가되는 표현식 입니다.

App Services는 삭제 작업에 대해 그리고 역할에 삭제할 문서의 모든 필드에 대한 write 권한이 있는지 확인한 후에만 삭제 작업에 대해 이 표현식을 평가합니다.

search
부울
기본값입니다: true

역할에 Atlas Search 를 사용하여 컬렉션을 검색할 수 있는 권한이 있는 경우 true로 평가되는 표현식 입니다.

중요

App Services는 시스템 사용자로 $search 작업을 수행하고 반환된 검색 결과에 필드 수준 규칙을 적용합니다. 즉, 사용자가 읽기 액세스 권한이 없는 필드에서 검색할 수 있습니다. 이 경우 검색은 지정된 필드를 기반으로 하지만 반환된 문서에는 필드가 포함되지 않습니다.

fields
문서
기본값입니다: {}

각 키가 필드 이름에 해당하고 각 값이 쿼리된 문서의 해당 필드에 대한 역할의 필드 수준 readwrite 권한을 정의하는 문서입니다.

동기화 호환성 을 유지하려면 내부 readwrite 표현식이 부울 리터럴( true 또는 false)이어야 합니다.

"fields": {
"<Field Name>": {
"read": { Expression },
"write": { Expression },
"fields": <Fields Document>
},
...
}

참고

권한 우선 순위

문서 수준 read 또는 write 권한은 동일한 유형의 모든 필드 수준 권한을 재정의합니다. 내장된 문서가 포함된 필드에 대해 권한이 정의된 경우 해당 권한은 문서의 내장된 필드에 정의된 모든 권한보다 우선합니다.

fields.<Field Name>.read
object?
기본값입니다: false

역할에 필드를 읽을 수 있는 권한이 있는 경우 true로 평가되는 표현식 입니다.

동기화 호환성 을 유지하려면 표현식이 부울 리터럴( true 또는 false)이어야 합니다.

fields.<Field Name>.write
object?
기본값입니다: false

역할에 필드를 추가, 수정 또는 제거할 수 있는 권한이 있는 경우 true로 평가되는 표현식 입니다.

동기화 호환성 을 유지하려면 표현식이 부울 리터럴( true 또는 false)이어야 합니다.

fields.<Field Name>.fields
문서
기본값입니다: {}

쿼리된 문서에서 이 필드 내에 포함된 필드에 대한 readwrite 권한을 정의하는 fields 문서입니다.

자세한 내용은 내장된 문서에 대한 필드 수준 권한 역할 패턴을 참조하세요.

additional_fields
문서
기본값입니다: {}

fields 문서에 권한이 명시적으로 정의되지 않은 쿼리된 문서의 모든 필드에 대한 역할의 필드 수준 readwrite 권한을 정의하는 문서입니다.

동기화 호환성 을 유지하려면 내부 readwrite 표현식이 부울 리터럴( true 또는 false)이어야 합니다.

"additional_fields": {
"read": { Expression },
"write": { Expression }
}
additional_fields.read
object?
기본값입니다: false

fields 에 필드 수준 권한 정의가 없는 필드를 읽을 수 있는 권한이 역할에 있는 경우 true로 평가되는 표현식 입니다.

동기화 호환성 을 유지하려면 표현식이 부울( true 또는 false)이어야 합니다.

additional_fields.write
object?
기본값입니다: false

fields 에 필드 수준 권한 정의가 없는 필드를 추가, 수정 또는 제거할 수 있는 권한이 역할에 있는 경우 true로 평가되는 표현식 입니다.

동기화 호환성 을 유지하려면 표현식이 부울( true 또는 false)이어야 합니다.

{
"name": "<Filter Name>",
"apply_when": { Expression },
"query": { MongoDB Query },
"projection": { MongoDB Projection }
}
필드
설명
name
string
필수입니다. 필터의 이름입니다. 필터 이름은 필터를 식별하고 구분하는 데 유용합니다. 100자 이하로 제한됩니다.
apply_when
object

이 필터가 수신 MongoDB 작업에 적용되는 시기를 결정하는 표현식 입니다.

중요

Atlas App Services는 문서를 읽기 전에 필터를 평가하고 적용하므로 필터의 적용 시기 표현식에서 MongoDB 문서 확장을 사용할 수 없습니다. 그러나 %%user, %%values%function와(과) 같은 다른 확장을 사용할 수 있습니다.

query
object
기본값입니다: {}

App Services가 필터링된 작업의 기존 쿼리에 병합하는 MongoDB 쿼리 입니다.

예제

필터는 다음 쿼리를 사용하여 미만의 가 있는 문서를 보류합니다.score 20

{ "score": { "$gte": 20 } }
projection
object
기본값입니다: {}

App Services가 필터링된 작업의 기존 프로젝션에 병합하는 MongoDB 프로젝션 입니다.

중요

프로젝션 충돌

MongoDB 프로젝션은 포괄적 또는 배타적일 수 있습니다. 즉, 지정된 필드만 반환하거나 지정되지 않은 필드를 보류할 수 있습니다. 쿼리에 여러 필터가 적용되는 경우 필터가 모두 동일한 유형의 프로젝션을 지정해야 하며, 그렇지 않으면 쿼리가 실패합니다.

예제

필터는 다음 프로젝션을 사용하여 모든 문서에서 _internal 필드를 보류합니다.

{ "_internal": 0 }
← 사용자 & 인증 제공자 구성 파일