Closed6
firestoreでいい感じに逆引き検索がしたい
userとgroupに多対多の関係があるときに、groupAに属するuserのコレクションとuserAが属するgroupのコレクションをどちらも取得できるようにしておきたい。KVSではどうやるの
そもそもreferenceとかsnapshotとかよくわかっていなかった
できればデータベースは正規化したいので、ユーザーは所属しているグループの情報を持ち、グループは所属しているユーザーの状態を持たないとする
// ユーザーのDocumentReference
userDocumentReference = FirebaseFirestore.instance.collection('users').doc(widget.user.email);
// ユーザーが所属するグループのStream<QuerySnapshot>(多分)
groupCollectionSnapshot = userDocumentReference.collection('groups').snapshots();
// ユーザーが所属するindex個目のグループのDocumentSnapshot
groupDocumentSnapshot = groupCollectionSnapshot.data!.docs[index];
groupDocumentSnapshot
にFirebaseFirestore.instance.collection('groups')
のDocumentReferenceを持たせれば、ユーザーが所属している各グループの詳細を必要に応じて取得できそう多分
前提はこのままで、特定のグループに所属しているユーザーのコレクションを取得できるかどうか
大変そう
サブコレクションではなくて配列にidだけ持たせとく方が楽そう
users
コレクションとgroups
コレクションをルート下に作成しておいて以下のように参照するのが結局シンプルで扱いやすそうな気がする
// それぞれ配列型フィールドにreferenceを持たせておく
groupDocumentRef.update({'users': FieldValue.arrayUnion([userDocumentRef])});
userDocumentRef.update({'groups': FieldValue.arrayUnion([groupDocumentRef])});
// 逆引き
FirebaseFirestore.instance.collection('groups').where('users', arrayContains: userDocumentRef);
FirebaseFirestore.instance.collection('users').where('groups', arrayContains: groupDocumentRef);
このスクラップは16日前にクローズされました