firestoreでドキュメントの任意の並び順を管理・更新するためにはどういった方法がよいでしょうか?
FireStoreの構成
学習として、Vue.jsでfirestoreを利用して、並び替えられるToDoリスト(カンバン)を作っています。
リアルタイムアップデートを利用して、多人数で使うことを想定し、ToDo(Task)の並び順をデータに反映させたいです。
storeは以下のような構成です。
//FireStoreでの構成 Boards(Collection) - Board(Document) - Tasks(Collection) - Task(Document) - タスクのフィールドに個別データ //TasksのCollectionからDocumentを取得のイメージ {tasks:[ {taskDocId:"gadsad", order:0, data:"myToDo"}, {taskDocId:"dafafa", order:1, data:"myToDo"}, {taskDocId:"fasdas", order:2, data:"myToDo"}, {taskDocId:"gadaaf", order:3, data:"myToDo"} ]} //Vue側でToDoのカードとして一覧表示し、任意に順番を並び替える //作成・削除・並び替えタイミングでorderを更新していきたい
どういった方法で任意の順番を管理するのがよいのか、教えていただけませんでしょうか。
A案.Functionsを使う?
- ソートして取得するための任意の順番をTaskDocumentにもたせようと思っている
- データが追加されるたびにTasksCollectionの全ドキュメントをクライアント側で取得してorderを書き換えてまわっても、その間に別のユーザーが追加している可能性もあるため、よくないよな、と思う
- 洗い替え的な処理は、FireBase Functionsでやるものなのでしょうか?
Functionsでやる場合は
0. webクライアント側でユーザーが並び替える
0. クライアント側でorderをローカルで更新し、Documentの更新をFireStoreに送る
0. Functionsでorderの重複を解決する
みたいな感じをイメージしておけばよいでしょうか・・・
B案.親階層のDocumentのフィールドで管理する?
最初、Board DocumentのフィールドにTaskDocumentのIDの配列をもたせて管理しようかと思って試したのですが、
- 並び替え用配列も同時更新して、クライアント側でソートかけようかと思った
- 新しいTaskをaddしてIDができた時点でもうリアルタイムアップデートがかかってしまうため、更新にラグが発生してしまいよくなかった
2/23追記:C案.リアルタイム更新対象にしない?
よく考えたらロード時の復元のために並び順が必要なだけで、リアルタイムにFirestoreと同期とれる必要もないのかも?と思い、この項目を足します。
- 初期化時のみデータのorderで並び替えて取得する
- 編集画面を離脱するまでリアルタイムアップデート対象にしない。
- orderデータは更新するが編集中はFirestoreのソート機能を使わない。または編集画面離脱時orderを一括アップデートして整合とる
等、考えているのですが、「FireStoreのDocumentの任意の順番を管理する方法」で定石やよいアイデアがあれば教えてください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。