notionのサブアイテム機能で今の要素までのpathを取得する方法
概要
notionのデータベースを使っているときに、サブアイテム機能を使って階層構造で要素を管理していたとします。
a
child 1
nested child 1
このとき、各レコードにおいて、自身までのpath (例えばnested child 1のレコードでは、path=[”a”, “child 1”, “nested child 1”])を取得する方法を考えます。
結論
再帰的に親アイテムを参照し、pathを設定します。スケッチとしては以下のようなイメージです。
current.ancestors = current.parent.path
current.path = concat(current.ancestors, [current.title])
詳細
具体的には以下の3ステップで行えます。説明のために、title, parent, childという列を持ったテーブルを想定します。
まず、pathという列を追加し、数式プロパティとします。関数は一旦何も設定しないで置きます。
次にancestorsという列を追加し、種類をロールアップとします。ここにリレーション: parent, プロパティ: pathとして設定します。これは現在のコンテンツの一個上の階層までのpath (ancestors)を格納する列になります。
最後にpathプロパティの関数を
concat(ancestors, [title])と設定します。
この設定により、pathの列に現在のコンテンツまでのpathが格納されます。
原理としては、ancestorsに親までのpathが入っているので、そのparent pathに自分のタイトルを追加してpathとして計算し、それが子から見たときにancestorsになり、…という風に再帰的にpathが導出されます。