Closed6

firestoreでいい感じに逆引き検索がしたい

yhfsyhfs

userとgroupに多対多の関係があるときに、groupAに属するuserのコレクションとuserAが属するgroupのコレクションをどちらも取得できるようにしておきたい。KVSではどうやるの

yhfsyhfs

できればデータベースは正規化したいので、ユーザーは所属しているグループの情報を持ち、グループは所属しているユーザーの状態を持たないとする

// ユーザーのDocumentReference
userDocumentReference = FirebaseFirestore.instance.collection('users').doc(widget.user.email);
// ユーザーが所属するグループのStream<QuerySnapshot>(多分)
groupCollectionSnapshot = userDocumentReference.collection('groups').snapshots();
// ユーザーが所属するindex個目のグループのDocumentSnapshot
groupDocumentSnapshot = groupCollectionSnapshot.data!.docs[index];

groupDocumentSnapshotFirebaseFirestore.instance.collection('groups')のDocumentReferenceを持たせれば、ユーザーが所属している各グループの詳細を必要に応じて取得できそう多分

yhfsyhfs

前提はこのままで、特定のグループに所属しているユーザーのコレクションを取得できるかどうか

yhfsyhfs

大変そう
サブコレクションではなくて配列にidだけ持たせとく方が楽そう

yhfsyhfs

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日前にクローズされました