오늘도 더 나은 코드를 작성하였습니까?

Realm kotlin Read 본문

kotlin Multiplatform/realm-kotlin-kmm

Realm kotlin Read

hik14 2022. 7. 26. 11:23

Find Object by Primary Key

특정 primary 키 값을 가진 객체를 찾으려면 Realm을 열고 realm.query()를 사용하여 원하는 primary 키 값에 대한 기본 키 필드를 쿼리합니다. 객체 유형을 query()에 전달된 유형 매개변수로 지정하십시오

// Search equality on the primary key field name
val frogs: Frog? = realm.query<Frog>("_id == $0", PRIMARY_KEY_VALUE).first().find()

* find()는 호출된 스레드에서 동기 쿼리를 실행합니다. 따라서 UI 스레드 또는 UI 스레드를 지연시킬 수 있는 로직에서 find()를 사용하지 마십시오. 시간에 민감한 환경에서는 asFlow()를 사용한다

Find Objects of a Type - Kotlin SDK

모든 객체를 찾으려면 Realm을 열고 유형 매개변수로 유형을 realm.query()에 전달

// fetch all objects of a type as a flow, asynchronously
val frogsFlow: Flow<ResultsChange<Frog>> = realm.query<Frog>().asFlow()
val asyncCall: Deferred<Unit> = async {
    frogsFlow.collect { results ->
        when (results) {
            // print out initial results
            is InitialResults<Frog> -> {
                for (frog in results.list) {
                    Log.v("Frog: $frog")
                }
            } else -> {
                // do nothing on changes
            }
        }
    }
}
// fetch all objects of a type as a results collection, synchronously
val frogs: RealmResults<Frog> = realm.query<Frog>().find()
for(frog in frogs) {
    Log.v("Frog: $frog")
}

Filter Data - Kotlin SDK

결과를 필터링하여 realm.query()를 사용하여 Realm Objects의 조건에 맞는 일부를 검색합니다.

realm.query()의 인수에서 Realm 쿼리 언어를 사용하여 필터링을 수행합니다.

 

Realm 쿼리 언어는 영역에서 객체를 검색하는 데 사용할 수 있는 문자열 기반 쿼리 언어입니다.

 

쿼리 언어

https://www.mongodb.com/docs/realm/realm-query-language/#std-label-rql

 

Realm Query Language — Realm

Docs Home → RealmRealm Query Language (RQL) is a string-based query language to constrain searches when retrieving objects from a realm. SDK-specific methods pass queries to the Realm query engine, which retrieves matching objects from the realm.Queries

www.mongodb.com

// Find frogs where name is 'Michigan J. Frog'
val michiganFrogs: RealmResults<Frog> =
    realm.query<Frog>("name = 'Michigan J. Frog'").find()
// Find frogs where age > 3 AND species is 'Green'
val oldGreenFrogs: RealmResults<Frog> =
    realm.query<Frog>("age > 3 AND species = 'green'").find()

Sort Queries - Kotlin SDK

결과를 정렬하려면

 

SORT -  realm.query()에 전달된 쿼리에서 정렬을 지정

DISTINCT - 결과를 필드의 고유한 값으로 제한

LIMIT - 결과 수를 제한

 

SDK는 RealmQuery에서 편리한 메소드를 제공하므로 키워드를 수동으로 작성할 필요가 없습니다

 

realmQuery.sort()

realmQuery.distinct()

realmQuery.limit()

 

RQL 및 메서드 형식 모두에서 동일한 쿼리에 사용되는 경우,

SORT, DISTINCT 및 LIMIT는 쿼리에 추가된 순서대로 실행됩니다. 이는 query에서 반환된 결과에 영향을 줄 수 있습니다.

 

RQL 형식

val somewhatLessConvenientlyOrganizedFrogs: Flow<ResultsChange<Frog>> =
    realm.query<Frog>("name = 'George Washington' SORT(age DESC) DISTINCT(owner) LIMIT(5)")
    .asFlow()

Method 형식

val convenientlyOrganizedFrogs: Flow<ResultsChange<Frog>> =
    realm.query<Frog>("name = 'George Washington'")
        .sort("age", Sort.DESCENDING)
        .distinct("owner")
        .limit(5)
        .asFlow()

Iteration - Kotlin SDK

Flows를 사용하여 결과를 반복할 수 있습니다

결과를 Flow로 변환하려면 realmQuery.asFlow()를 호출, 그런 다음 flow.collect() 사용하여 결과를 반복한다.

// fetch frogs from the realm as Flowables
val frogsFlow: Flow<ResultsChange<Frog>> = realm.query<Frog>().asFlow()
// iterate through the flow with collect, printing each item
val frogsObserver: Deferred<Unit> = async {
    frogsFlow.collect { results ->
        when (results) {
            // print out initial results
            is InitialResults<Frog> -> {
                for (frog in results.list) {
                    Log.v("Frog: $frog")
                }
            }
            else -> {
                // do nothing on changes
            }
        }
    }
}

 

 

'kotlin Multiplatform > realm-kotlin-kmm' 카테고리의 다른 글

Realm Kotlin Create  (0) 2022.07.25
Realm Transaction  (0) 2022.07.25
Realm kotlin scheme  (0) 2022.07.25
Realm kotlin schem(Data Type)  (0) 2022.07.25
Frozen Architecture - Kotlin SDK  (0) 2022.07.25