문서 메뉴

문서 홈애플리케이션 개발Atlas Device SDK

Realm 객체 모델 정의 - React Native SDK

이 페이지의 내용

  • 객체 유형 정의
  • 지원되는 속성 유형
  • 개체 속성 정의
  • 선택적 속성 설정
  • 프라이머리 키 설정
  • 속성 인덱싱
  • Full Text Search 인덱스 설정
  • 기본 속성 값 설정
  • 속성 재매핑
  • 비대칭 객체 정의
  • TypeScript 및 필수 속성

Realm 객체 유형을 정의하려면 Realm.Object을(를) 확장하는 클래스를 생성하세요. schema라는 정적 속성에서 유형의 nameproperties을(를) 정의합니다. 타입의 이름은 영역의 객체 유형들 사이에서 고유해야 합니다.

그런 다음 Realm을 열 때 클래스 자체를 구성 객체의 스키마 속성에 전달할 수 있습니다.

Realm 객체의 모든 속성에는 강력하게 정의된 데이터 유형이 있습니다. 속성 유형은 기본 데이터 유형이거나 동일한 영역에 정의된 객체 유형일 수 있습니다. 또한 유형은 속성에 단일 값이 포함되어 있는지 또는 값 목록이 포함되어 있는지 여부를 지정합니다.

필드에 기본 값 유형 목록이 포함되도록 지정하려면 유형 이름에 []을(를) 추가하세요.

지원되는 속성 유형 목록은 속성 유형을 참조하세요.

개체 유형의 속성을 정의하려면 properties 필드 아래에 속성의 이름과 데이터 유형을 나타내는 키-값 쌍을 만듭니다.

다음 스키마는 _id make, modelmiles 속성이 있는 Car 유형을 정의합니다.

속성을 선택 사항으로 표시하려면 개체 구문을 사용하여 optional을(를) true(으)로 설정합니다. 유형에 ? 물음표를 추가하는 간단한 구문을 사용할 수도 있습니다. 기본 유형에 가장 적합합니다. 더 복잡한 유형에는 더 구체적인 객체 구문을 사용해야 합니다.

다음 Person 클래스 예에서 agebirthday 속성은 모두 선택 사항입니다.

class Person extends Realm.Object<Person> {
name!: string;
age?: number;
birthday?: Date;
static schema: ObjectSchema = {
name: 'Person',
properties: {
name: 'string',
age: {
type: 'int',
optional: true,
},
// You can use a simplified syntax instead. For
// more complicated types, use the object syntax.
birthday: 'date?',
},
};
}

속성을 객체 유형의 프라이머리 키로 지정하려면 스키마의 primaryKey 필드를 속성 이름으로 설정하세요.

참고

기본 키 는 객체를 고유하게 식별하는 속성입니다. Realm은 기본 키 속성을 자동으로 인덱싱 하므로 기본 키를 기반으로 객체를 효율적으로 읽고 수정할 수 있습니다.

객체 유형에 프라이머리 키가 있는 경우 해당 유형의 모든 객체에는 Realm에 있는 동일한 유형의 객체 중 고유한 값을 갖는 프라이머리 키 속성이 포함되어야 합니다. 객체 유형에는 프라이머리 키가 하나만 있을 수 있습니다. 해당 유형의 객체를 Realm에 추가한 후에는 해당 객체 유형의 프라이머리 키 속성을 변경할 수 없으며 객체의 프라이머리 키 값을 수정할 수 없습니다.

다음 Task 클래스 예에서는 _id 속성을 프라이머리 키로 지정합니다.

특정 속성을 기반으로 읽기 작업을 자주 실행하는 경우 속성을 인덱싱하여 성능을 최적화할 수 있습니다. Realm은 문자열, 정수, 부울, Date, UUIDObjectId 속성에 대한 인덱싱을 지원합니다.

참고

인덱스를 사용하면 쓰기 시간이 약간 느려지고 스토리지 및 메모리 오버헤드가 늘어나는 대신 특정 읽기 작업의 속도가 크게 향상됩니다. Realm은 인덱스를 디스크에 저장하므로 Realm 파일이 더 커집니다. 각 인덱스 항목은 최소 12바이트입니다. 인덱스 항목의 순서는 효율적인 동일성 일치 및 범위 기반 쿼리 작업을 지원합니다.

지정된 속성을 색인화하려면 속성의 indexed 필드를 true(으)로 설정합니다.

다음 Book 클래스 예에서는 name 속성에 대한 인덱스를 정의합니다.

Realm은 표준 인덱스 외에도 문자열 속성에 대한 FTS(Full-Text Search) 인덱스도 지원합니다. 표준 인덱스 유무에 관계없이 문자열 필드를 쿼리할 수 있지만 FTS 인덱스를 사용하면 여러 단어와 구를 검색하고 나머지는 제외할 수 있습니다.

FTS 인덱스 쿼리에 대한 자세한 내용은 Full Text Search를 참조하세요.

FTS 인덱스를 만들려면 인덱싱된 유형을 'full-text' 로 설정합니다. 이를 통해 속성에 대한 전체 텍스트 쿼리가 가능합니다. 다음 예제에서는 name 속성의 인덱싱된 유형을 'full-text' 으)로 설정합니다.

class Book extends Realm.Object<Book> {
name!: string;
price?: number;
static schema: ObjectSchema = {
name: 'Book',
properties: {
name: {type: 'string', indexed: 'full-text'},
price: 'int?',
},
};
}

기본값을 정의하려면 속성 값을 type 필드와 default 필드가 있는 객체로 설정하세요.

다음 Car 클래스 예에서는 기본값이 0miles 속성을 정의합니다.

버전 11.1.0의 새로운 기능

Realm.js v11.1.0 이상에서는 함수를 사용하여 아래 예의 timestamp 속성과 같은 동적 기본값을 정의할 수 있습니다.

Realm에 저장된 것과 다른 속성 이름을 코드에 사용하려면 코드에 표시되는 속성 이름으로 mapTo을(를) 설정하세요.

다음 Employee 클래스 예에서는 first_name 속성을 firstName에 다시 매핑합니다.

유연한 동기화를 사용 중이고 장치에서 Atlas 데이터베이스로 컬렉션을 단방향으로 동기화해야 하는 경우 객체 스키마에서 asymmetric 속성을 설정할 수 있습니다.

realm@12.2.1 버전에서 변경됨

JS SDK 버전 12.2.0 이하에서는 비대칭 객체에서 Realm.Object 유형으로 링크할 수 없습니다. SDK 버전 12.2.1 이상에서는 비대칭 개체가 포함된 개체 외에도 Realm.Object 유형에 연결할 수 있습니다.

참고

비대칭 객체 읽기 시도

비대칭 객체는 읽을 수 없습니다. 비대칭 객체를 쿼리하려고 하면 '오류: 비대칭 클래스는 쿼리할 수 없습니다.'라는 오류가 발생합니다.

데이터 수집에 대해 자세히 알아보려면 Atlas로 데이터 스트리밍을 읽어보세요.

Realm.create() 를 사용 하여 Realm 객체를 생성하는 것이 좋지만 new 객체 모델의 클래스에 연산자를 사용할 수도 있습니다.

new을(를)사용하는 경우 Realm.Object 확장 시 필수 속성과 함께 클래스를 일반 클래스로 추가해야 합니다. 이를 통해 필수 필드가 정의되지 않은 경우의 유형 오류를 포함하여 객체 모델에 대한 전체 TypeScript 지원이 가능해집니다.

class Book extends Realm.Object<Book, 'name' | 'store'> {
name!: string;
store!: string;
price?: number;
static schema: ObjectSchema = {
name: 'Book',
properties: {
name: {type: 'string', indexed: true},
store: 'string',
price: 'int?',
},
};
}
← 모델 데이터 - React Native SDK