데이터 필터링 - C++ SDK
영역의 데이터를 필터링하려면 Realm의 쿼리 엔진을 활용하면 됩니다. 필터링된 데이터를 정렬할 수도 있습니다. 쿼리 결과를 정렬하는 방법에 대한 예는 목록 정렬 및 쿼리 결과를 참조하세요.
참고
C++ SDK는 다른 SDK가 제공하는 전체 범위의 쿼리 표현식을 아직 지원하지 않습니다.
해당 페이지의 예제에 대한 정보
이 페이지의 예제에서는 할 일 목록 앱의 간단한 데이터 세트를 사용합니다. 두 가지 Realm 객체 유형은 Project
및 Item
입니다. Item
에는 다음이 포함됩니다.
이름
완성된 플래그
담당자 이름(선택 사항)
우선 순위를 나타내는 숫자로, 높을수록 중요합니다.
작업에 소요된 시간(분)
Project
는 0개 이상의 Items
에 이름과 대다 관계를 갖습니다.
Project
및 Item
의 스키마는 다음과 같습니다.
struct Item { std::string name; bool isComplete; std::optional<std::string> assignee; int64_t priority; int64_t progressMinutes; }; REALM_SCHEMA(Item, name, isComplete, assignee, priority, progressMinutes) struct Project { std::string name; std::vector<Item*> items; }; REALM_SCHEMA(Project, name, items)
다음 코드를 사용하여 이러한 예시에 대한 영역을 설정할 수 있습니다.
auto config = realm::db_config(); auto realm = realm::db(std::move(config)); auto item1 = realm::Item{.name = "Save the cheerleader", .assignee = std::string("Peter"), .isComplete = false, .priority = 6, .progressMinutes = 30}; auto project = realm::Project{.name = "New project"}; project.items.push_back(&item1); realm.write([&] { realm.add(std::move(project)); }); auto items = realm.objects<realm::Item>(); auto projects = realm.objects<realm::Project>();
데이터 필터링
비교 연산자
값 비교
연산자 | 설명 |
---|---|
== | 왼쪽 표현식이 오른쪽 표현식과 같은 경우 true (으)로 평가합니다. |
> | 왼쪽 숫자 또는 날짜 표현식이 오른쪽 숫자 또는 날짜 표현식보다 크면 true (으)로 평가합니다. 날짜의 경우 왼쪽 날짜가 오른쪽 날짜보다 늦으면 true (으)로 평가합니다. |
>= | 왼쪽 숫자 또는 날짜 표현식이 오른쪽 숫자 또는 날짜 표현식보다 크거나 같으면 true (으)로 평가합니다. 날짜의 경우 왼쪽 날짜가 오른쪽 날짜보다 늦거나 같으면 true (으)로 평가합니다. |
< | 왼쪽 숫자 또는 날짜 표현식이 오른쪽 숫자 또는 날짜 표현식보다 작으면 true (으)로 평가합니다. 날짜의 경우 왼쪽 날짜가 오른쪽 날짜보다 이르면 true (으)로 평가합니다. |
<= | 왼쪽 숫자 표현식이 오른쪽 숫자 표현식보다 작거나 같으면 true (으)로 평가합니다. 날짜의 경우 왼쪽 날짜가 오른쪽 날짜보다 이르거나 같으면 true (으)로 평가합니다. |
!= | 왼쪽 표현식이 오른쪽 표현식과 같지 않은 경우 true (으)로 평가합니다. |
예시
다음 예시에서는 쿼리 엔진의 비교 연산자를 사용하여 다음 작업을 수행합니다.
priority
속성 값 중 우선 순위가 높은 것으로 간주되는 값을 임계값과 비교하여 우선순위가 작업을 찾습니다.progressMinutes
속성이 특정 범위 내에 속하는지 확인하여 방금 시작한 작업이나 단기 실행 작업을 찾습니다.속성
assignee
이std::nullopt
과 같은 작업을 찾아 할당되지 않은 작업을 찾습니다.이름 목록에
assignee
속성이 있는지 확인하여 Ali 또는 Jamie라는 특정한 팀원에게 할당된 작업을 찾을 수 있습니다.
auto highPriorityItems = items.where([](auto const& item) { return item.priority > 5; }); auto quickItems = items.where([](auto const& item) { return item.progressMinutes > 1 && item.progressMinutes < 30; }); auto unassignedItems = items.where( [](auto const& item) { return item.assignee == std::nullopt; }); auto aliOrJamieItems = items.where([](auto const& item) { return item.assignee == std::string("Ali") || item.assignee == std::string("Jamie"); });
로직 연산
다음 표에 나열된 논리 연산자를 사용하여 복합 조건자를 만들 수 있습니다.
연산자 | 설명 |
---|---|
&& | 왼쪽 및 오른쪽 표현식이 모두 true 인 경우 true (으)로 평가합니다. |
! | 주어진 표현식의 결과를 무효화합니다. |
|| | 두 표현식 중 하나가 true 를 반환하면 true (으)로 평가합니다. |
예시
쿼리 언어의 논리 연산자를 사용하여 Ali가 완료한 모든 작업을 찾을 수 있습니다. 즉, assignee
속성 값이 'Ali'이고 isComplete
속성 값이 true
인 모든 작업을 찾습니다.
auto completedItemsForAli = items.where([](auto const& item) { return item.assignee == std::string("Ali") && item.isComplete == true; });
문자열 연산자
이러한 문자열 연산자를 사용하여 문자열 값을 비교할 수 있습니다.
연산자 | 설명 |
---|---|
.contains(_ value: String) | 왼쪽 문자열 표현식이 오른쪽 문자열 표현식의 어느 위치에서든 발견되면 true 로 평가합니다. |
== | 왼쪽 문자열이 오른쪽 문자열과 사전순으로 동일한 경우 true (으)로 평가합니다. |
!= | 왼쪽 문자열이 오른쪽 문자열과 사전 순으로 같지 않은 경우 true (으)로 평가합니다. |
예시
다음 예시에서는 쿼리 엔진의 문자열 연산자를 사용하여 다음을 찾습니다.
이름에 'ie'가 포함된 프로젝트
auto containIe = items.where([](auto const& item) { return item.name.contains("ie"); });