데이터 필터링 - Java SDK
이 페이지의 내용
쿼리 엔진
영역의 데이터를 필터링하려면 Realm 쿼리 엔진을 사용하세요.
Java SDK로 쿼리 엔진에 액세스하는 방법에는 두 가지가 있습니다.
유창한 인터페이스
Java SDK 는 Fluent 인터페이스 를 사용합니다. 쿼리 엔진 에 전달되는 다중 절 쿼리를 구성합니다.
사용 가능한 메서드 전체 목록은 RealmQuery API를 참조하세요.
Realm 컬렉션을 필터링하는 데 사용할 수 있는 연산자에는 여러 가지 유형이 있습니다. 필터는 필터링 대상 컬렉션의 모든 객체에 대한 연산자 표현식을 평가함으로써 작동합니다. 표현식이 true
로 확인되면 Realm 데이터베이스의 결과 컬렉션에 해당 객체가 포함됩니다.
표현식은 다음 중 한 가지로 구성되어 있습니다.
현재 평가 중인 객체의 속성 이름입니다.
연산자와 최대 2개의 인수 표현식입니다.
리터럴 문자열, 숫자 또는 날짜
이 섹션의 예시 정보
이 페이지의 예시에서는 작업 목록 앱의 간단한 데이터 세트를 사용합니다. 두 가지 Realm 객체 유형은 Project
및 Task
입니다. Task
에는 이름, 담당자 이름 및 완료 플래그가 있습니다. 우선 순위를 뜻하는 임의 숫자(클수록 더 중요)와 작업에 소요된 시간(분)도 있습니다. Project
에는 Tasks
가 0개 이상 있습니다.
아래에서 이 두 클래스의 스키마 Project
및 Task
를 참조하세요.
import org.bson.types.ObjectId; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; import io.realm.annotations.RealmClass; import io.realm.annotations.Required; public class ProjectTask extends RealmObject { public ObjectId _id; public String name; public String assignee; public int progressMinutes; public boolean isComplete; public int priority; public String _partition; }
import org.bson.types.ObjectId; import io.realm.RealmList; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; import io.realm.annotations.RealmClass; import io.realm.annotations.Required; public class Project extends RealmObject { public ObjectId _id; public String name; public RealmList<ProjectTask> tasks = new RealmList<>(); }
import io.realm.RealmObject import io.realm.annotations.PrimaryKey import io.realm.annotations.Required import org.bson.types.ObjectId open class ProjectTask( var _id: ObjectId = ObjectId(), var name: String = "", var assignee: String? = null, var progressMinutes: Int = 0, var isComplete: Boolean = false, var priority: Int = 0, var _partition: String = "" ): RealmObject()
import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.PrimaryKey import io.realm.annotations.Required import org.bson.types.ObjectId open class Project( var _id: ObjectId = ObjectId(), var name: String = "", var tasks: RealmList<ProjectTask> = RealmList(), ): RealmObject()
비교 연산자
검색에서 가장 간단한 작업은 값을 비교하는 것입니다.
연산자 | 설명 |
---|---|
| 왼쪽 숫자 또는 날짜 표현식이 오른쪽 범위 사이에 있거나 같으면 |
equalTo | 왼쪽 표현식이 오른쪽 표현식과 같은 경우 |
greaterThan | 왼쪽 숫자 또는 날짜 표현식이 오른쪽 숫자 또는 날짜 표현식보다 크면 |
greaterThanOrEqualTo | 왼쪽 숫자 또는 날짜 표현식이 오른쪽 숫자 또는 날짜 표현식보다 크거나 같으면 |
| 왼쪽 표현식이 오른쪽 목록에 있는 경우 |
lessThan | 왼쪽 숫자 또는 날짜 표현식이 오른쪽 숫자 또는 날짜 표현식보다 작으면 |
lessThanOrEqualTo | 왼쪽 숫자 표현식이 오른쪽 숫자 표현식보다 작거나 같으면 |
notEqualTo | 왼쪽 표현식이 오른쪽 표현식과 같지 않은 경우 |
예시
다음 예시에서는 쿼리 엔진의 비교 연산자를 사용하여 다음 작업을 수행합니다.
priority
속성 값 중 우선 순위가 높은 것으로 간주되는 값을 임계값과 비교하여 우선순위가 작업을 찾습니다.progressMinutes
속성이 특정 범위 내에 속하는지 확인하여 방금 시작한 작업이나 단기 실행 작업을 찾습니다.속성
assignee
이null
과 같은 작업을 찾아 할당되지 않은 작업을 찾습니다.이름 목록에
assignee
속성이 있는지 확인하여 Ali 또는 Jamie라는 특정한 팀원에게 할당된 작업을 찾을 수 있습니다.
RealmQuery<ProjectTask> tasksQuery = realm.where(ProjectTask.class); Log.i("EXAMPLE", "High priority tasks: " + tasksQuery.greaterThan("priority", 5).count()); Log.i("EXAMPLE", "Just-started or short tasks: " + tasksQuery.between("progressMinutes", 1, 10).count()); Log.i("EXAMPLE", "Unassigned tasks: " + tasksQuery.isNull("assignee").count()); Log.i("EXAMPLE", "Ali or Jamie's tasks: " + tasksQuery.in("assignee", new String[]{"Ali", "Jamie"}).count());
val tasksQuery = realm.where(ProjectTask::class.java) Log.i("EXAMPLE", "High priority tasks: " + tasksQuery.greaterThan("priority", 5).count()) Log.i("EXAMPLE", "Just-started or short tasks: " + tasksQuery.between("progressMinutes", 1, 10).count()) Log.i("EXAMPLE", "Unassigned tasks: " + tasksQuery.isNull("assignee").count()) Log.i("EXAMPLE", "Ali or Jamie's tasks: " + tasksQuery.`in`("assignee", arrayOf("Ali", "Jamie")).count())
로직 연산
논리 연산자를 사용하여 복합 조건자를 작성할 수 있습니다.
연산자 | 설명 |
---|---|
and | 왼쪽 및 오른쪽 표현식이 모두 |
not | 주어진 표현식의 결과를 무효화합니다. |
or | 두 표현식 중 하나가 |
예시
쿼리 언어의 논리 연산자를 사용하여 Ali가 완료한 모든 작업을 찾을 수 있습니다. 즉, assignee
속성 값이 'Ali'이고 isComplete
속성 값이 true
인 모든 작업을 찾습니다.
RealmQuery<ProjectTask> tasksQuery = realm.where(ProjectTask.class); Log.i("EXAMPLE", "Ali has completed " + tasksQuery.equalTo("assignee", "Ali").and().equalTo("isComplete", true).findAll().size() + " tasks.");
val tasksQuery = realm.where(ProjectTask::class.java) Log.i("EXAMPLE", "Ali has completed " + tasksQuery.equalTo("assignee", "Ali").and() .equalTo("isComplete", true).findAll().size + " tasks.")
문자열 연산자
이러한 문자열 연산자를 사용하여 문자열 값을 비교할 수 있습니다. 정규식과 유사한 와일드카드를 사용하면 더욱 유연하게 검색할 수 있습니다.
연산자 | 설명 |
---|---|
beginsWith | 왼쪽 문자열 표현식이 오른쪽 문자열 표현식으로 시작하면 |
| 왼쪽 문자열 표현식이 오른쪽 문자열 표현식의 어느 위치에서든 발견되면 |
endsWith | 왼쪽 문자열 표현식이 오른쪽 문자열 표현식으로 끝나는 경우 |
like | 왼쪽 문자열 표현식이 오른쪽 문자열 와일드카드 문자열 표현식과 일치하는 경우
예를 들어 와일드카드 문자열 'd?g'는 'dog', 'dig', 'dug'과 일치되지만 'ding', 'dg' 또는 'a dog'와는 일치되지 않습니다. |
equalTo | 왼쪽 문자열이 오른쪽 문자열과 사전순으로 동일한 경우 |
예시
쿼리 엔진의 문자열 연산자를 사용하여 이름의 첫 글자가 'e'인 프로젝트와 이름에 'ie'가 포함된 프로젝트를 찾습니다.
RealmQuery<Project> projectsQuery = realm.where(Project.class); // Pass Case.INSENSITIVE as the third argument for case insensitivity. Log.i("EXAMPLE", "Projects that start with 'e': " + projectsQuery.beginsWith("name", "e", Case.INSENSITIVE).count()); Log.i("EXAMPLE", "Projects that contain 'ie': " + projectsQuery.contains("name", "ie").count());
val projectsQuery = realm.where(Project::class.java) // Pass Case.INSENSITIVE as the third argument for case insensitivity. Log.i("EXAMPLE", "Projects that start with 'e': " + projectsQuery.beginsWith("name", "e", Case.INSENSITIVE).count()) Log.i("EXAMPLE", "Projects that contain 'ie': " + projectsQuery.contains("name", "ie").count())
참고
대소문자를 구분하지 않는 문자 제한
대소문자를 구분하지 않는 문자열 연산자는 Latin Basic
, Latin Supplement
, Latin Extended A
, Latin Extended B (UTF-8 range 0–591)
문자 세트만 지원합니다. equalTo
, notEqualTo
, contains
, endsWith
, beginsWith
또는 like
를 사용할 때 쿼리에서 대소문자를 구분하지 않는 플래그를 설정하는 것은 영어 국가 및 문자에서만 작동합니다.
집계 연산자
Realm 객체의 컬렉션 속성에 애그리게이션 연산자를 적용할 수 있습니다. 애그리게이션 연산자는 컬렉션을 순회하여 이를 하나의 값으로 줄입니다.
연산자 | 설명 |
---|---|
average | 컬렉션 전체에서 주어진 숫자 속성의 평균값으로 평가합니다. |
count | 주어진 컬렉션의 객체 수로 평가합니다. |
max | 컬렉션 전체에서 주어진 숫자 속성의 가장 높은 값을 평가합니다. |
min | 컬렉션 전체에서 주어진 숫자 속성의 가장 낮은 값으로 평가합니다. |
sum | 컬렉션 전체에서 주어진 숫자 속성의 합계로 평가합니다. |
예시
데이터의 다양한 측면을 나타내는 몇 가지 필터를 생성합니다.
작업 우선 순위의 평균이 5보다 높은 프로젝트
장기 실행 프로젝트
RealmQuery<ProjectTask> tasksQuery = realm.where(ProjectTask.class); /* Aggregate operators do not support dot-notation, so you cannot directly operate on a property of all of the objects in a collection property. You can operate on a numeric property of the top-level object, however: */ Log.i("EXAMPLE", "Tasks average priority: " + tasksQuery.average("priority"));
val tasksQuery = realm.where(ProjectTask::class.java) /* Aggregate operators do not support dot-notation, so you cannot directly operate on a property of all of the objects in a collection property. You can operate on a numeric property of the top-level object, however: */Log.i("EXAMPLE", "Tasks average priority: " + tasksQuery.average("priority"))
필터, 정렬, 제한, 고유 및 체인 쿼리
이 섹션의 예시 정보
이 페이지의 예시에서는 Teacher
및 Student
의 두 가지 Realm 객체 유형을 사용합니다.
아래에서 이 두 클래스에 대한 스키마를 참조하세요.
import io.realm.RealmList; import io.realm.RealmObject; public class Teacher extends RealmObject { private String name; private Integer numYearsTeaching; private String subject; private RealmList<Student> students; public Teacher() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getNumYearsTeaching() { return numYearsTeaching; } public void setNumYearsTeaching(Integer numYearsTeaching) { this.numYearsTeaching = numYearsTeaching; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public RealmList<Student> getStudents() { return students; } public void setStudents(RealmList<Student> students) { this.students = students; } }
import io.realm.RealmObject; import io.realm.RealmResults; import io.realm.annotations.LinkingObjects; public class Student extends RealmObject { private String name; private Integer year; private final RealmResults<Teacher> teacher = null; public Student() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getYear() { return year; } public void setYear(Integer year) { this.year = year; } public RealmResults<Teacher> getTeacher() { return teacher; } }
import io.realm.RealmList import io.realm.RealmObject open class Teacher : RealmObject() { var name: String? = null var numYearsTeaching: Int? = null var subject: String? = null var students: RealmList<Student>? = null }
import io.realm.RealmObject import io.realm.RealmResults import io.realm.annotations.LinkingObjects open class Student : RealmObject() { var name: String? = null var year: Int? = null val teacher: RealmResults<Teacher>? = null }
필터
플루언트 인터페이스 의 연산자 메서드를 사용하여 필터를 빌드할 수 있습니다. RealmQuery 클래스에 의해 노출됩니다.
// Build the query looking at all teachers: RealmQuery<Teacher> query = realm.where(Teacher.class); // Add query conditions: query.equalTo("name", "Ms. Langtree"); query.or().equalTo("name", "Mrs. Jacobs"); // Execute the query: RealmResults<Teacher> result1 = query.findAll(); // Or alternatively do the same all at once (the "Fluent interface"): RealmResults<Teacher> result2 = realm.where(Teacher.class) .equalTo("name", "Ms. Langtree") .or() .equalTo("name", "Mrs. Jacobs") .findAll();
// Build the query looking at all teachers: val query = realm.where(Teacher::class.java) // Add query conditions: query.equalTo("name", "Ms. Langtree") query.or().equalTo("name", "Mrs. Jacobs") // Execute the query: val result1 = query.findAll() // Or alternatively do the same all at once (the "Fluent interface"): val result2 = realm.where(Teacher::class.java) .equalTo("name", "Ms. Langtree") .or() .equalTo("name", "Mrs. Jacobs") .findAll()
그러면 RealmResults 클래스의 새 인스턴스가 생성되며 여기에는 이름이 "Ms. Langtree" 또는 "Mrs. Jacobs"인 선생님이 포함됩니다.
RealmQuery
쿼리를 실행할 수 있는 여러 메서드가 포함되어 있습니다.
findAll()은 쿼리 조건을 충족하는 모든 객체를 찾을 때까지 차단합니다.
findAllAsync()은 즉시 반환하고 백그라운드 스레드에서 쿼리 조건을 비동기적으로 충족하는 모든 객체를 찾습니다.
findFirst()는 쿼리 조건을 충족하는 첫 번째 객체를 찾을 때까지 차단합니다.
findFirstAsync()는 즉시 반환하며 백그라운드 스레드에서 비동기적으로 쿼리 조건을 충족하는 첫 번째 객체를 찾습니다.
쿼리는 RealmResults 유형을 사용하여 일치하는 Realm 객체에 대한 참조 목록을 반환합니다.
링크 쿼리
객체 속성을 참조할 때는 점 표기법을 사용하여 해당 객체의 하위 속성을 참조할 수 있습니다. 점 표기법으로 내장된 객체 의 속성 및 관계를 참조할 수 있습니다.
예를 들어 "Wirt" 또는 "Greg" 라는 이름의 학생을 가진 선생님에 대한 쿼리를 생각해 보겠습니다.
// Find all teachers who have students with the names "Wirt" or "Greg" RealmResults<Teacher> result = realm.where(Teacher.class) .equalTo("students.name", "Wirt") .or() .equalTo("students.name", "Greg") .findAll();
// Find all teachers who have students with the names "Wirt" or "Greg" val result = realm.where(Teacher::class.java) .equalTo("students.name", "Wirt") .or() .equalTo("students.name", "Greg") .findAll()
점 표기법을 사용하여 역관계를 쿼리할 수도 있습니다.
// Find all students who have teachers with the names "Ms. Langtree" or "Mrs. Jacobs" RealmResults<Student> result = realm.where(Student.class) .equalTo("teacher.name", "Ms. Langtree") .or() .equalTo("teacher.name", "Mrs. Jacobs") .findAll();
// Find all students who have teachers with the names "Ms. Langtree" or "Mrs. Jacobs" val result = realm.where(Student::class.java) .equalTo("teacher.name", "Ms. Langtree") .or() .equalTo("teacher.name", "Mrs. Jacobs") .findAll()
결과 정렬
중요
Realm은 지정한 순서대로 distinct()
, sort()
및 limit()
메서드를 적용합니다. 데이터 세트에 따라 쿼리 결과가 변경될 수 있습니다. 일반적으로 의도하지 않은 결과 세트를 피하려면 limit()
을 마지막에 적용해야 합니다.
sort() 메서드를 사용하여 쿼리 결과의 순서를 정의할 수 있습니다.
// Find all students in year 7, and sort them by name RealmResults<Student> result = realm.where(Student.class) .equalTo("year", 7) .sort("name") .findAll(); // Alternatively, find all students in year 7 RealmResults<Student> unsortedResult = realm.where(Student.class) .equalTo("year", 7) .findAll(); // then sort the results set by name RealmResults<Student> sortedResult = unsortedResult.sort("name");
// Find all students in year 7, and sort them by name val result: RealmResults<Student> = realm.where(Student::class.java) .equalTo("year", 7L) .sort("name") .findAll() // Alternatively, find all students in year 7 val unsortedResult: RealmResults<Student> = realm.where(Student::class.java) .equalTo("year", 7L) .findAll() // then sort the results set by name val sortedResult = unsortedResult.sort("name")
정렬은 기본적으로 오름차순으로 결과를 정리합니다. 결과를 내림차순으로 정렬하려면 Sort.DESCENDING
을 두 번째 인수로 전달합니다. 단일 속성 대신 속성 배열을 전달하여 동일한 속성 값 사이의 정렬 순서 연결을 해결할 수 있습니다. 동점인 경우 Realm은 연결된 객체를 후속 속성을 기준으로 순서대로 정렬합니다.
참고
문자열 정렬 제한 사항
Realm은 대문자와 소문자에 대해 비표준 정렬을 사용하여 대문자를 먼저 정렬하지 않고 함께 정렬합니다. 결과적으로 '- !"#0&()*,./:;?_+<=>123aAbBcC...xXyYzZ
이 Realm의 실제 정렬 순서입니다. 또한 문자열 정렬은 Latin Basic
, Latin Supplement
, Latin Extended A
및 Latin Extended B (UTF-8 range 0–591)
문자 세트만 지원합니다.
결과 제한
limit() 메서드를 사용하여 쿼리 결과 수를 특정 최대값으로 제한할 수 있습니다.
// Find all students in year 8, and limit the results collection to 10 items RealmResults<Student> result = realm.where(Student.class) .equalTo("year", 8) .limit(10) .findAll();
// Find all students in year 8, and limit the results collection to 10 items val result: RealmResults<Student> = realm.where(Student::class.java) .equalTo("year", 8L) .limit(10) .findAll()
제한된 결과 컬렉션은 다른 쿼리 결과와 마찬가지로 자동으로 업데이트됩니다. 따라서 기본 데이터가 변경되면 객체가 컬렉션에서 제외될 수 있습니다.
팁
페이지 매김은 Realm 최적화에 필요하지 않습니다
일부 데이터베이스에서는 디스크에서 불필요한 데이터를 읽거나 너무 많은 메모리를 사용하지 않도록 제한을 두고 결과 페이지 매김을 권장합니다.
Realm 쿼리는 게으르기 때문에 이러한 조치를 취할 필요가 없습니다. Realm은 명시적으로 액세스한 경우에만 쿼리 결과에서 객체를 로드합니다.
팁
제한된 결과에서 삭제된 알림
컬렉션 알림은 결과 세트에서 제외될 때 객체가 제거된 것으로 보고합니다. 그렇다고 해서 반드시 기본 영역에서 삭제된 것은 아니며 더 이상 쿼리 결과의 일부가 아니라는 의미일 뿐입니다.
고유 결과
distinct() 메서드를 사용하여 쿼리 결과를 지정된 필드에 대한 고유한 값으로 줄일 수 있습니다.
// Find all students in year 9, and cap the result collection at 10 items RealmResults<Student> result = realm.where(Student.class) .equalTo("year", 9) .distinct("name") .findAll();
// Find all students in year 9, and cap the result collection at 10 items val result: RealmResults<Student> = realm.where<Student>(Student::class.java) .equalTo("year", 9L) .distinct("name") .findAll()
정수, 롱, 숏 및 String
필드에서만 distinct()
을(를) 호출할 수 있습니다. 다른 필드 유형에서는 예외가 발생합니다. 정렬과 마찬가지로 여러 필드를 지정하여 동점자를 해결할 수 있습니다.
체인 쿼리
where() 메서드를 호출하여 결과 컬렉션에 추가 필터를 적용할 수 있습니다.
// Find all students in year 9 and resolve the query into a results collection RealmResults<Student> result = realm.where(Student.class) .equalTo("year", 9) .findAll(); // filter the students results again by teacher name RealmResults<Student> filteredResults = result.where().equalTo("teacher.name", "Ms. Langtree").findAll();
// Find all students in year 9 and resolve the query into a results collection val result: RealmResults<Student> = realm.where(Student::class.java) .equalTo("year", 9L) .findAll() // filter the students results again by teacher name val filteredResults = result.where().equalTo("teacher.name", "Ms. Langtree").findAll()
where()
메서드는 find
메서드를 사용하여 RealmResults
로 해석할 수 있는 RealmQuery
을 반환합니다. 필터링된 결과는 원래 결과 세트와 동일한 유형의 객체만 반환할 수 있지만 그렇지 않은 경우 모든 필터를 사용할 수 있습니다.
RQL(Realm Query Language)을 사용한 쿼리
버전 10.4.0에 추가되었습니다.
또한 영역에서 객체를 검색할 때 검색을 제한하는 문자열 기반 쿼리 언어인 Realm Query Language를 사용하여 영역을 쿼리할 수도 있습니다.
RealmQuery.rawPredicate() 를 사용할 수 있습니다. 구문, 사용법 및 제한 사항에 대한 자세한 내용은 RQL 참조를 참조하세요.
Realm Query Language는 Realm 모델 클래스에 정의된 클래스 및 속성 이름이나 @RealmField
(으)로 정의된 내부 이름을 사용할 수 있습니다. 원시 조건자를 다른 원시 조건자 또는 RealmQuery
(으)로 생성된 유형이 안전한 조건자와 결합할 수 있습니다.
// Build a RealmQuery based on the Student type RealmQuery<Student> query = realm.where(Student.class); // Simple query RealmResults<Student> studentsNamedJane = query.rawPredicate("name = 'Jane'").findAll(); // Multiple predicates RealmResults<Student> studentsNamedJaneOrJohn = query.rawPredicate("name = 'Jane' OR name = 'John'").findAll(); // Collection queries RealmResults<Student> studentsWithTeachers = query.rawPredicate("teacher.@count > 0").findAll(); RealmResults<Student> studentsWithSeniorTeachers = query.rawPredicate("ALL teacher.numYearsTeaching > 5").findAll(); // Sub queries RealmResults<Student> studentsWithMathTeachersNamedSteven = query.rawPredicate("SUBQUERY(teacher, $teacher, $teacher.subject = 'Mathematics' AND $teacher.name = 'Mr. Stevens').@count > 0").findAll(); // Sort, Distinct, Limit RealmResults<Student> students = query.rawPredicate("teacher.@count > 0 SORT(year ASCENDING) DISTINCT(name) LIMIT(5)").findAll(); // Combine two raw predicates RealmResults<Student> studentsNamedJaneOrHenry = query.rawPredicate("name = 'Jane'") .rawPredicate("name = 'Henry'").findAll(); // Combine raw predicate with type-safe predicate RealmResults<Student> studentsNamedJaneOrHenryAgain = query.rawPredicate("name = 'Jane'") .equalTo("name", "Henry").findAll();
// Build a RealmQuery based on the Student type val query = realm.where(Student::class.java) // Simple query val studentsNamedJane = query.rawPredicate("name = 'Jane'").findAll() // Multiple predicates val studentsNamedJaneOrJohn = query.rawPredicate("name = 'Jane' OR name = 'John'").findAll() // Collection queries val studentsWithTeachers = query.rawPredicate("teacher.@count > 0").findAll() val studentsWithSeniorTeachers = query.rawPredicate("ALL teacher.numYearsTeaching > 5").findAll() // Sub queries val studentsWithMathTeachersNamedSteven = query.rawPredicate("SUBQUERY(teacher, \$teacher, \$teacher.subject = 'Mathematics' AND \$teacher.name = 'Mr. Stevens').@count > 0") .findAll() // Sort, Distinct, Limit val students = query.rawPredicate("teacher.@count > 0 SORT(year ASCENDING) DISTINCT(name) LIMIT(5)") .findAll() // Combine two raw predicates val studentsNamedJaneOrHenry = query.rawPredicate("name = 'Jane'") .rawPredicate("name = 'Henry'").findAll() // Combine raw predicate with type-safe predicate val studentsNamedJaneOrHenryAgain = query.rawPredicate("name = 'Jane'") .equalTo("name", "Henry").findAll()
팁
Realm Query Language 예시도 참조하세요.
다음 페이지에서도 유용한 Realm Query Language 예시를 찾을 수도 있습니다.