11.1 プロパティ要素の分類
- データベースを取得したときの JSON オブジェクト(Property object)
- ページを取得したときの JSON オブジェクト(Property item object)
- データベースを設定するときの JSON オブジェクト (Property schema object)
- ページを追加・更新する時の JSON オブジェクト (Property value object)
- データベースを検索するための JSON オブジェクト (Property filter object)
11.2 Property object / Property schema object
プロパティ確認用11.2 で確認するプロパティ確認用データベースです。ブロックハンドル(6点メニュー)から「リンクをコピー」してプロパティ確認用データベースの URL に貼り付けてください。
プロパティ確認用データベースの URL を貼り付けます。プロパティ確認用データベースの URL
例: https://www.notion.so/hkob/7d16fe15159d40a6b6f8aab255c47e6f?v=7569e5029eb7450eaf6b7e6aae0df1c3
このデータベース URL を用いて、Ruby のデータベースオブジェクトを取得します。取得した JSON の中から データベースオブジェクトを取得 (Ruby) データベースプロパティ JSON を取得 (Ruby)
properties
キーオブジェクトを取り出しておきます。# プロパティ確認用データベースを取得 db = Database.find "プロパティ確認用データベースの URL"
# データベースプロパティが含まれた Ruby オブジェクト (Property object 確認用) dps = db.json["properties"]
11.2.1 設定値がないプロパティ
print JSON.pretty_generate(dps.slice "チェックボックス")
JSON 部分をコピー&貼り付けCheckbox property の Property object
11.2.2 関数 (formula)
print JSON.pretty_generate(dps.slice "関数")
JSON 部分をコピー&貼り付けformula property の Property object
11.2.3 セレクト (select) / マルチセレクト (multi_select)
print JSON.pretty_generate(dps.slice "セレクト")
JSON 部分をコピー&貼り付けselect property の Property object
11.2.4 数値 (number)
print JSON.pretty_generate(dps.slice "数値")
JSON 部分をコピー&貼り付けnumber property の Property object
11.2.5 リレーション (relation)
print JSON.pretty_generate(dps.slice "片方向リレーション先")
JSON 部分をコピー&貼り付けrelation property(single_property) の Property object
print JSON.pretty_generate(dps.slice "双方向リレーション先")
JSON 部分をコピー&貼り付けrelation property(dual_property) の Property object
11.2.6 ロールアップ (rollup)
print JSON.pretty_generate(dps.slice "ロールアップ")
JSON 部分をコピー&貼り付けrollup property の Property object
"function"
に利用可能な関数は以下の通りです。関数 | 日本語メニュー | 対象の型 | 返り値の型 |
count_all | すべてカウント | すべての型 | 数値 |
count_values | 値の数をカウント | すべての型 | 数値 |
count_unique_values | 一意の値をカウント | 数値・文字列・日付 | 数値 |
count_empty | 未入力をカウント | 数値・文字列・日付 | 数値 |
count_not_empty | 未入力以外をカウント | 数値・文字列・日付 | 数値 |
percent_empty | 未入力の割合 | 数値・文字列・日付 | 数値 |
percent_not_empty | 未入力以外の割合 | 数値・文字列・日付 | 数値 |
checked | チェックあり | ブール値 | 数値 |
unchecked | チェックなし | ブール値 | 数値 |
percent_checked | チェックありの割合 | ブール値 | 数値 |
percent_unchecked | チェックなしの割合 | ブール値 | 数値 |
sum | 合計 | 数値 | 数値 |
average | 平均 | 数値 | 数値 |
median | 中央値 | 数値 | 数値 |
min | 最小 (数値)
最も古い日付 (日付) | 数値
日付 | 数値
日付 |
max | 最大 (数値)
最も新しい日付 (日付) | 数値
日付 | 数値
日付 |
range | 範囲(数値)
日付範囲(日付) | 数値
日付 | 数値
日付範囲 |
show_original | オリジナルを表示する | すべての型 | 配列 |
show_unique | 一意の値を表示する | すべての型 | 配列 |
11.3 Property item object / Property value object
データベース内には二つのページが登録されています。このうち「データ1」ページへのメンションリンクをここに用意しておきました。このページを開き、page URL を取得してください。
データ1
プロパティ確認用ページの URL を貼り付けます。プロパティ確認用ページ(データ1ページ)の URL
例: https://www.notion.so/hkob/1-1771b75598ec478a98d3c64b1ae62846
このページ URL を用いて、Ruby のページオブジェクトを取得します。取得した JSON の中から page オブジェクトの取得 ページプロパティ JSON を取得
properties
キーオブジェクトを取り出しておきます。# プロパティ確認用データベースを取得 page = Page.find "データ 1 ページの URL"
# ページプロパティが含まれた Ruby オブジェクト (Property item object 確認用) pps = page.json["properties"]
11.3.1 作成者 (created_by) /最終更新者 (last_edited_by)
print JSON.pretty_generate(pps.slice "作成者")
JSON 部分をコピー&貼り付けcreated_by property の Property item object
print JSON.pretty_generate(pps.slice "最終更新者")
JSON 部分をコピー&貼り付けlast_edited_by property の Property item object
11.3.2 作成日時 (created_time) /最終更新日時 (last_edited_time)
print JSON.pretty_generate(pps.slice "作成日時")
JSON 部分をコピー&貼り付けcreated_time property の Property item object
print JSON.pretty_generate(pps.slice "最終更新日時")
JSON 部分をコピー&貼り付けlast_edited_time property の Property item object
11.3.3 関数 (formula)
print JSON.pretty_generate(pps.slice "関数")
JSON 部分をコピー&貼り付けformula の Property item object
11.3.4 ロールアップ (rollup)
print JSON.pretty_generate(pps.slice "ロールアップ")
JSON 部分をコピー&貼り付けrollup property (count) の Property item object
print JSON.pretty_generate(pps.slice "ロールアップ(オリジナル)")
JSON 部分をコピー&貼り付けrollup property (show_original) の Property item object
11.3.5 チェックボックス (checkbox)
print JSON.pretty_generate(pps.slice "チェックボックス")
JSON 部分をコピー&貼り付けcheckbox property の Property item object
11.3.6 日付 (date)
print JSON.pretty_generate(pps.slice "日付")
JSON 部分をコピー&貼り付けdate property の Property item object
11.3.7 メール (email)
print JSON.pretty_generate(pps.slice "メール")
JSON 部分をコピー&貼り付けemail property の Property item object
11.3.8 ファイル & メディア (files)
print JSON.pretty_generate(pps.slice "ファイル&メディア")
JSON 部分をコピー&貼り付けfiles property の Property item object
11.3.9 マルチセレクト (multi_select)
print JSON.pretty_generate(pps.slice "マルチセレクト")
JSON 部分をコピー&貼り付けmulti_select property の Property item object
11.3.10 数値 (number)
print JSON.pretty_generate(pps.slice "数値")
JSON 部分をコピー&貼り付けnumber property の Property item object
11.3.11 ユーザー (people)
print JSON.pretty_generate(pps.slice "ユーザー")
JSON 部分をコピー&貼り付けnumber property の Property item object
11.3.12 電話 (phone_number)
print JSON.pretty_generate(pps.slice "電話")
JSON 部分をコピー&貼り付けphone_number property の Property item object
11.3.13 リレーション (relation)
print JSON.pretty_generate(pps.slice "片方向リレーション先")
JSON 部分をコピー&貼り付けrelation property の Property item object
11.3.14 テキスト (rich_text)
print JSON.pretty_generate(pps.slice "テキスト")
JSON 部分をコピー&貼り付けrich_text property の Property item object
11.3.15 セレクト (select)
print JSON.pretty_generate(pps.slice "セレクト")
JSON 部分をコピー&貼り付け
11.3.16 タイトル (title)
print JSON.pretty_generate(pps.slice "タイトル")
JSON 部分をコピー&貼り付けtitle property の Property item object
11.3.17 URL (url)
print JSON.pretty_generate(pps.slice "URL")
JSON 部分をコピー&貼り付けurl property の Property item object
11.4 Filter object
11.4.1 存在・非存在条件
データベース Ruby オブジェクトから PropertyCache オブジェクトを取得しておきます。
ps = db.properties
print JSON.pretty_generate(ps["数値"].filter_is_not_empty.filter)
JSON 部分をコピー&貼り付けis_not_empty 条件
print JSON.pretty_generate(ps["数値"].filter_is_empty.filter)
JSON 部分をコピー&貼り付けis_not_empty 条件
11.4.2 一致・不一致条件
print JSON.pretty_generate(ps["URL"].filter_equals("ABC").filter)
JSON 部分をコピー&貼り付けequals 条件
print JSON.pretty_generate(ps["URL"].filter_does_not_equal("ABC").filter)
JSON 部分をコピー&貼り付けdoes_not_equal 条件
print JSON.pretty_generate(ps["日付"].filter_equals(Date.new(2022, 10, 15)).filter)
JSON 部分をコピー&貼り付けNotionRubyMapping 拡張
11.4.3 包含・非包含条件
print JSON.pretty_generate(ps["タイトル"].filter_contains("ABC").filter)
JSON 部分をコピー&貼り付けcontains 条件
print JSON.pretty_generate(ps["タイトル"].filter_does_not_contain("ABC").filter)
JSON 部分をコピー&貼り付けdoes_not_contain 条件
11.4.4 開始・終了条件
print JSON.pretty_generate(ps["テキスト"].filter_starts_with("ABC").filter)
JSON 部分をコピー&貼り付けstarts_with 条件
print JSON.pretty_generate(ps["テキスト"].filter_ends_with("ABC").filter)
JSON 部分をコピー&貼り付けends_with 条件
11.4.5 数値の大小条件
print JSON.pretty_generate(ps["数値"].filter_greater_than(10).filter)
JSON 部分をコピー&貼り付けgreater_than 条件
print JSON.pretty_generate(ps["数値"].filter_less_than(10).filter)
JSON 部分をコピー&貼り付けless_than 条件
print JSON.pretty_generate(ps["数値"].filter_greater_than_or_equal_to(10).filter)
JSON 部分をコピー&貼り付けgreater_than_or_equal_to 条件
print JSON.pretty_generate(ps["数値"].filter_less_than_or_equal_to(10).filter)
JSON 部分をコピー&貼り付けless_than_or_equal_to 条件
11.4.5 日付の前後条件
日付系プロパティ(
date
, created_time
, last_edited_time
)のみ、日付の前後を比較するフィルタが利用できます。まず、特定の日付・時間の前後関係に関するフィルタとして、前(before
)、後(after
)、今を含む前(on_or_before
)、今を含む後(on_or_after
)が利用できます。これも日付の場合には、UTC になるので注意が必要です。せっかくなので、ここでは Timestamp filter object の例で説明しています。このように専用のプロパティを用意していなくても、データベースの作成時刻を使って絞り込みをすることが可能です。こちらも before
の結果のみ示します。print JSON.pretty_generate(db.created_time.filter_before(Time.local(2022, 10, 15, 12, 0, 0)).filter)
JSON 部分をコピー&貼り付けbefore 条件
print JSON.pretty_generate(db.created_time.filter_after(Time.local(2022, 10, 15, 12, 0, 0)).filter)
JSON 部分をコピー&貼り付けafter 条件
print JSON.pretty_generate(db.created_time.filter_on_or_before(Time.local(2022, 10, 15, 12, 0, 0)).filter)
JSON 部分をコピー&貼り付けon_or_before 条件
print JSON.pretty_generate(db.created_time.filter_on_or_after(Time.local(2022, 10, 15, 12, 0, 0)).filter)
JSON 部分をコピー&貼り付けon_or_after 条件
print JSON.pretty_generate(db.last_edited_time.filter_past_week.filter)
JSON 部分をコピー&貼り付けpast_week 条件
print JSON.pretty_generate(db.last_edited_time.filter_next_week.filter)
JSON 部分をコピー&貼り付けnext_week 条件
print JSON.pretty_generate(db.last_edited_time.filter_past_month.filter)
JSON 部分をコピー&貼り付け
print JSON.pretty_generate(db.last_edited_time.filter_next_month.filter)
JSON 部分をコピー&貼り付けnext_month 条件
print JSON.pretty_generate(db.last_edited_time.filter_past_year.filter)
JSON 部分をコピー&貼り付けpast_year 条件
print JSON.pretty_generate(db.last_edited_time.filter_next_year.filter)
JSON 部分をコピー&貼り付けnext_year 条件
print JSON.pretty_generate(db.last_edited_time.filter_this_week.filter)
JSON 部分をコピー&貼り付けthis_week 条件
11.4.6 関数(formula)に対する条件
print JSON.pretty_generate(ps["関数"].filter_equals(true, another_type: "checkbox").filter)
JSON 部分をコピー&貼り付けFormula filter object
11.4.7 ロールアップ(rollup)に対する条件
rp = ps["ロールアップ"]
print JSON.pretty_generate(rp.filter_greater_than(10, another_type: "number").filter)
print JSON.pretty_generate(rp.filter_past_week(another_type: "date").filter)
一方、
show_original
や show_unique
の場合には、複数個の値が存在します。ロールアップの場合には、それらのどれかの値が該当するか (any
)、全ての値が該当するか (every
)、全ての値が該当しないか (none
) を確認することができます。例えばチェックボックスを複数個ロールアップしてきた場合を考えましょう。複数個存在するチェックボックスのいずれかにチェックがされているものを抽出する場合には以下のようになります。print JSON.pretty_generate(rp.filter_equals(true, another_type: "checkbox", condition: "any").filter)
print JSON.pretty_generate(rp.filter_equals(true, another_type: "checkbox", condition: "every").filter)
print JSON.pretty_generate(rp.filter_equals(true, another_type: "checkbox", condition: "none").filter)