![見出し画像](https://assets.st-note.com/production/uploads/images/117790913/rectangle_large_type_2_f0934f1161e686fc9a7f6ac472ecf545.jpeg?width=1200)
Velo 第23回 コレクションの参照フィールドとは
コレクションの通常フィールドにはフィールド名、フィールドキー、フィールドタイプという3種類のプロパティがあります。
フィールドタイプはフィールドに収めているコンテンツの型を表します。
文字ならテキスト型、写真なら画像型、等々ですが、この中に参照型というものがあります。
例えば何らかの曲のリストを作る場合を考えましょう。
曲には作曲者がいますが、これはこれでたくさんの情報を持っています。
だからと言ってこれを丁寧に書いていては、目的が判然としなくなります。
「作曲者については名前だけにしておいて、曲のリストとは別に作曲者のデータが用意されているから必要なら参照できるようにしよう」と言うのがスマートな考え方でしょう。
他のコレクションにデータがあるならそれを利用しましょうということですね。
他のコレクションを利用することを参照と言い、そのフィールドを参照フィールドと言います。つまり参照フィールドとは「このフィールドのデータは他のコレクションのデータを利用してますよ」と宣言しているフィールドのことです。
参照フィールドをもつコレクション(参照元)が他のコレクション(参照先)へのリンクを持っています。
一方、利用される側のコレクションのフィールドをプライマリーフィールドと言います。
ただし、プライマリーフィールドはどのコレクションにもありフィールドトップに旗マークが付いています。
これは他のコレクションから参照されるときはこのフィールドを使いますという自己宣言です。
どのフィールドを使うかは必要に応じて自分で任意に設定できます。ただしプライマリーフィールドは、他のコレクションから参照される際には辞書や単語帳のような役割をしますので同じ値が含まれないようにします。
さて、参照先の Friends コレクションは以下の通りです。name フィールドがプライマリーフィールドです。
![](https://assets.st-note.com/img/1694512765182-d6e1RMiHsw.png?width=1200)
一方、参照元の Songs コレクションは参照フィールドをもち、Friends コレクションのプライマリーフィールドの値を選択しています。
![](https://assets.st-note.com/img/1694513461177-vvKiHGn6LV.png?width=1200)
この関係を記号 f : Songs → Friends で表してみましょう。
コレクションSongs の i 番目のアイテムは、参照フィールドを経てコレクション Friendsの f ( i ) 番目のアイテムに繋がっています。
i 番目のアイテムを { i } で表せば、上の例では、f ( { 1 } ) = { 2 }、f ( { 2 } ) = { 3 }、f ( { 3 } ) = { 1 }、… となっています。参照は関数と思って大丈夫です。
参照元のコレクション Songs 側からこの参照を見ると Songs の i 番目のアイテム { i } は、{ i } と { f ( i ) } を結合したアイテム { i , f ( i ) } ができます。
つまり、参照元の Songs コンテンツと参照先の Friends コンテンツを結合して同時に表示できるという事になります。
以下の図をご覧下さい。
ページに Songs コレクションのデータセットを置きテーブルに接続しています。
「テーブルを管理」を見ますと テーブルの friend列 はフィールド:referenced title、Photo列 はフィールド:referennced photo となっています。これは Friends データセットは置いていませんが、参照を使ってFriends コレクションのフィールドを表示していることを意味しています。
![](https://assets.st-note.com/img/1694518620763-NDqxiRZLVE.png?width=1200)
今度は、参照先のコレクション Friends 側からこの参照を見てみましょう。Friends の k 番目のアイテム { k } に対しf ( { i } ) = { k } となる Songs のアイテム { i } は複数存在します。それを i , j , … とし、f の逆関数を g で表すと g の値は g ( { k } ) = [ { i } , { j } , …] のように配列に値をとります。
従ってFriends の各アイテムに対し、Songs に参照でフィルターを掛けると、そのアイテムに対応する Songs の部分コレクションができます。
つまり参照先の Friends コンテンツを、それを参照している 参照元の Songs 部分コンテンツと結合して同時に表示できるという事になります。
以下の図をご覧下さい。Friends コレクションで作った動的アイテムページのデータセットで name と photo のフィールドを表示させています。
同時に Songs のデータセットを置き、参照でフィルターを掛けテーブルに接続しています。テーブルにはSongs のデータ song と artist のフィールドが表示されていますが、Taro のものだけになってフィルターがしっかりかかっています。
![](https://assets.st-note.com/img/1694520483922-l8JvX9FZAc.png?width=1200)
このフィルターはSongs のデータセットをクリックし「コンテンツを管理」から参照フィルターを選んで掛けます。
以下の図をご覧下さい。
![](https://assets.st-note.com/img/1694521185549-XaL5gAUOhy.png)
Velo開発のご依頼はこちら