Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

データのフィルター - C++ SDK

項目一覧

  • このページの例について
  • フィルター データ
  • 比較演算子
  • 論理演算子
  • string演算子

Realm 内のデータをフィルタリングするには、Realm のクエリ エンジンを活用できます。 フィルタリングされたデータをソートすることもできます。 クエリ結果を並べ替える方法の例については、「リストとクエリ結果の並べ替え 」を参照してください。

注意

C++ SDK はまだ、他の SDK が提供するクエリ式の全範囲をサポートしていません。

このページの例では、Todo リスト アプリの単純なデータセットを使用しています。 Realm の 2 つのオブジェクトタイプは、 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)

次のコードを使用して、これらの例の Realm を設定できます。

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プロパティが名前のリストにあるかどうかを確認して、特定のチームメイト エイリアスまたはレイテンシに割り当てられたタスクを見つけます。

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;
});

これらの string 演算子を使用して、string の値を比較できます。

演算子
説明
.contains(_ value: String)
左側のstring式が右側のstring式のどこにある場合は、true と評価されます。
==
左側の文字列が右側のstringと辞書的に等しい場合、trueと評価されstring 。
!=
左側のstringが右側の文字列と辞書編集順に等しくない場合、trueと評価されstring 。

次の例では、クエリ エンジンの string 演算子を使用して次のものを検索します。

  • 名前に「つまり」が含まれるプロジェクト

auto containIe =
items.where([](auto const& item) { return item.name.contains("ie"); });

戻る

削除