データのフィルター - C++ SDK
Realm 内のデータをフィルタリングするには、Realm のクエリ エンジンを活用できます。 フィルタリングされたデータをソートすることもできます。 クエリ結果を並べ替える方法の例については、「リストとクエリ結果の並べ替え 」を参照してください。
注意
C++ SDK はまだ、他の SDK が提供するクエリ式の全範囲をサポートしていません。
このページの例について
このページの例では、Todo リスト アプリの単純なデータセットを使用しています。 Realm の 2 つのオブジェクトタイプは、 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)
次のコードを使用して、これらの例の 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 演算子を使用して、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"); });