filter_contains: NotionRubyMapping 解説 (59)

はじめに

NotionRubyMapping 解説の第59回目です。今日は値が含まれるものだけを抽出するfilter_contains をそれぞれのプロパティで確認してみます。これは複数個のデータを持つことができるプロパティか文字列のプロパティで使えるフィルターです。まず、以前使っていたデータベースを取得します。

parent

irb(main):002> db = Database.find "https://www.notion.so/hkob/cad035c49e5346e783
31cb5d05cbc754?v=a03e96ed79ad4d35808e7a08583396a0&pvs=4"
=> NotionRubyMapping::Database-cad035c49e5346e78331cb5d05cbc754

query_database のみ

まず何もフィルタをかけないデータベースの検索で件数が3件になることを確認します。

irb(main):003> db.query_database.count
=> 3

ここから各プロパティに対して、filter_does_not_equal でチェックがついていないものだけを抽出するフィルタリングをしてみます。最初は CreatedByProperty です。データベースの作成者と同じものだけを抽出してみましょう。今回は私だけしか使っていないので、全てのページにマッチします。

irb(main):004> dps = db.properties
=> PropertyCache
irb(main):005> user_id = db.json["created_by"]["id"]
=> "2200a911-6a96-44bb-bd38-6bfb1e01b9f6"
irb(main):009> db.query_database(dps["CreatedBy"].filter_contains user_id).count
=> 3

配列に関するプロパティの filter_contains は要素が含まれるものを抽出するものです。

irb(main):011> db.query_database(dps["People"].filter_contains user_id).count
=> 1
irb(main):029> db.query_database(dps["MultiSelect"].filter_contains "macOS").count
=> 1
irb(main):026> db.query_database(dps["LastEditedBy"].filter_contains user_id).count
=> 2

一方、文字列に関する filter_contains は文字列の部分一致をしたものを抽出するものです。同じメソッド名ですが、調査内容が異なるので注意してください。

irb(main):014> db.query_database(dps["Email"].filter_contains "example.com")
.count
=> 1
irb(main):018> db.query_database(dps["Url"].filter_contains "notion.site").count
=> 1
irb(main):020> db.query_database(dps["Name"].filter_contains "New").count
=> 1
irb(main):023> db.query_database(dps["RichText"].filter_contains "Sample").count
=> 1
irb(main):025> db.query_database(dps["PhoneNumber"].filter_contains "080").count
=> 1

おわりに

今日は、filter_contains を解説しました。配列を保持するプロパティでは値が含まれるものだけを抽出し、文字列を保持するプロパティでは指定された文字が文字列に含まれるものだけを抽出します。

CreatedByProperty のマニュアルはこちらです。その他のプロパティもここから見てください。

CreatedByProperty

NotionRubyMapping解説