はじめに
NotionRubyMapping 解説の第60回目です。今日は昨日の反対で値が含まれないものだけを抽出するfilter_does_not_contain をそれぞれのプロパティで確認してみます。これは複数個のデータを持つことができるプロパティか文字列のプロパティで使えるフィルターです。まず、以前使っていたデータベースを取得します。
irb(main):002> db = Database.find "https://www.notion.so/hkob/cad035c49e5346e78331cb5d05cbc754?v=a03e96ed79ad4d35808e7a08583396a0&pvs=4" => NotionRubyMapping::Database-cad035c49e5346e78331cb5d05cbc754
query_database のみ
まず何もフィルタをかけないデータベースの検索で件数が3件になることを確認します。
irb(main):003> db.query_database.count => 3
ここから各プロパティに対して、filter_does_not_contain でチェックがついていないものだけを抽出するフィルタリングをしてみます。最初は 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):006> db.query_database(dps["CreatedBy"].filter_does_not_contain user_id).count => 0
配列に関するプロパティの filter_does_not_contain は要素が含まれないものを抽出するものです。
irb(main):007> db.query_database(dps["People"].filter_does_not_contain user_id).count => 2 irb(main):008> db.query_database(dps["MultiSelect"].filter_does_not_contain "macOS").count => 2 irb(main):009> db.query_database(dps["LastEditedBy"].filter_does_not_contain user_id).count => 1
一方、文字列に関する filter_does_not_contain は文字列の部分一致をしないものを抽出するものです。同じメソッド名ですが、調査内容が異なるので注意してください。
irb(main):010> db.query_database(dps["Email"].filter_does_not_contain "example.com").count => 2 irb(main):011> db.query_database(dps["Url"].filter_does_not_contain "notion.site").count => 2 irb(main):012> db.query_database(dps["Name"].filter_does_not_contain "New").count => 2 irb(main):013> db.query_database(dps["RichText"].filter_does_not_contain "Sample").count => 2 irb(main):014> db.query_database(dps["PhoneNumber"].filter_does_not_contain "080").count => 2
おわりに
今日は、filter_does_not_contain を解説しました。配列を保持するプロパティでは値が含まれないものだけを抽出し、文字列を保持するプロパティでは指定された文字が文字列に含まれないものだけを抽出します。
CreatedByProperty のマニュアルはこちらです。その他のプロパティもここから見てください。