ノート
2024-04-20: Dataview JSのクエリを追記しました
やりたいこと
#task
タグが付いたノートの取得結果をフィルタリングする- 取得するノートのメタデータ
status
がdone
のノートの表示を切り替える
- 取得するノートのメタデータ
- フィルタリングにはチェックボックス(Boolean)のメタデータを使用する
- 今回は
hide_done
という名前のメタデータで切り替えを行う
- 今回は
フィルタリング方法
Dataviewを表示するノートにチェックボックスのメタデータを追加します。
---
hide_done: true
---
チェックボックスの値によって取得条件(WHERE句)を切り替えるクエリを作成します。
Dataview Query Languageの場合
Dataview Query Languageの場合、Dataviewを表示するノートのメタデータは this.メタデータ
で参照できます。
TABLE WITHOUT ID
file.link AS "name",
status
FROM #task
WHERE
(this.hide_done AND status != "done") OR !this.hide_done
クエリの補足
(this.hide_done AND status != "done")
hide_done
にチェックが入っていれば(trueであれば)、取得するノートのメタデータstatus
がdone
以外のノートを抽出する
OR !this.hide_done
hide_done
にチェックが入っていなければ(falseであれば)全件取得を行う
Dataview JSの場合
Dataview JSの場合、Dataviewを表示するノートのメタデータは dv.current().メタデータ
で参照できます。
const hide_done = dv.current().hide_done
const header = ['name', 'status']
const pages = dv.pages('#task')
.where(p => hide_done && p.status !== 'done' || !hide_done)
.map(p => [
p.file.link,
p.status
])
dv.table(header, pages)
実際の振る舞い
使用している環境ではメタデータの値を変更した約3秒後にメタデータの値がクエリに反映されました。