Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

데이터 필터링 - C++ SDK

이 페이지의 내용

  • 해당 페이지의 예제에 대한 정보
  • 데이터 필터링
  • 비교 연산자
  • 로직 연산
  • 문자열 연산자

영역의 데이터를 필터링하려면 Realm의 쿼리 엔진을 활용하면 됩니다. 필터링된 데이터를 정렬할 수도 있습니다. 쿼리 결과를 정렬하는 방법에 대한 예는 목록 정렬 및 쿼리 결과를 참조하세요.

참고

C++ SDK는 다른 SDK가 제공하는 전체 범위의 쿼리 표현식을 아직 지원하지 않습니다.

이 페이지의 예제에서는 할 일 목록 앱의 간단한 데이터 세트를 사용합니다. 두 가지 Realm 객체 유형은 ProjectItem 입니다. Item 에는 다음이 포함됩니다.

  • 이름

  • 완성된 플래그

  • 담당자 이름(선택 사항)

  • 우선 순위를 나타내는 숫자로, 높을수록 중요합니다.

  • 작업에 소요된 시간(분)

Project 는 0개 이상의 Items 에 이름과 대다 관계를 갖습니다.

ProjectItem 의 스키마는 다음과 같습니다.

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 속성이 특정 범위 내에 속하는지 확인하여 방금 시작한 작업이나 단기 실행 작업을 찾습니다.

  • 속성 assigneestd::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"); });

돌아가기

삭제