mBaaSのデータストアで使い方が難しいのがポインターとリレーションです。しかし使いこなせれば、これまで以上にデータ管理の自由度が増すでしょう。この記事ではTwitterライクな形でのデータストア利用法を紹介します。
利用するデータストアのクラスについて
クラスは以下を用意します。
- アカウント(Account)
- ツイート(Tweet)
ユーザでも良いですが、パスワードを登録しないといけないので今回はアカウントとしています。
アカウントを作成する
まずはアカウントを作成します。今回はJavaScript SDKを使っています。
const Account = ncmb.DataStore('Account'); const account1 = new Account; const account2 = new Account; const account3 = new Account; await account1.set('name', 'Account 1').save(); await account2.set('name', 'Account 2').save(); await account3.set('name', 'Account 3').save();
ツイートに対してツイート主を紐付ける
次にツイートを作成します。ツイートは一人のツイート主を持ちます。1つのデータ(アカウント)しか存在しませんので、ポインターを使います。
const Tweet = ncmb.DataStore('Tweet'); const tweet1 = new Tweet; await tweet1 .set('text', 'メッセージ') .set('account', account1) // アカウント紐付け .save();
いいねする
ツイートに対していいねします。今回はツイート主ではないアカウント2と3がいいねします。ここは1つのツイートに対して複数のいいねが付くので、リレーションを使います。
const likes = new ncmb.Relation(); likes.add(account2).add(account3); // いいねしたアカウント await tweet1.set('likes', likes).update();
フォローする
アカウント1のツイートをいいねしたアカウント2とアカウント3がフォローします。この情報はアカウント1にフォロワーとして追加します。ここも一つのデータ(アカウント1)に対して複数のデータ(アカウント2と3)が紐付くのでリレーションを使います。
const followers1 = new ncmb.Relation(); followers1.add(account2).add(account3); await account1.set('followers', followers1).update();
さらにアカウント1はアカウント2もフォローして相互フォローになります。ここもリレーションを使います。
const followers2 = new ncmb.Relation(); followers2.add(account1); await account2.set('followers', followers2).update();
別版
このようにしてデータストアの中でポインターとリレーションを使い分けられます。なお、この例ではアカウント1が誰と誰にフォローされているかは分かりますが、アカウント2が誰をフォローしているのかは分かりません。もう一つのやり方として、誰が誰をフォローしているかを別クラスで管理する方法もあります。
const Follow = ncmb.DataStore('Follow'); const follow = new Follow; // アカウント2がアカウント1をフォロー follow.set('follow', account2).set('follower', account1).save(); // アカウント3がアカウント1をフォロー follow.set('follow', account3).set('follower', account1).save(); // アカウント1がアカウント2をフォロー follow.set('follow', account1).set('follower', account2).save();
この場合、Followを常にポインターとして検索することで誰をフォローしているか、誰にフォローされているかが分かるようになります。
まとめ
リレーションとポインターを上手に使うことで複雑なリレーションも表現できるようになります。ぜひ使いこなしてください!