Tengo colecciones de usuarios y grupos. En la colección de usuarios, cada ID de documento es un UID de usuario y cada documento de usuario tiene un campo de matriz "grupos de usuarios" que contiene los grupos a los que pertenece el usuario y esos grupos son la ID de documento del grupo en la colección de grupos.
Pude recuperar la matriz de grupos de usuarios para el usuario actual que almacené en groupRef (ver el código a continuación). Lo que estoy tratando de hacer ahora es asignar esos valores de matriz a la colección de grupos y recuperar solo los documentos que están en groupRef. (Básicamente, el objetivo es mostrar en la interfaz de usuario los grupos de los que es miembro el usuario actual)
colección de grupo de colección de usuario
const [groupsList, setGroupList] = useState([]); const [groupRef, setGroupRef] = useState([]); const [track, setTrack] = useState('') const handleSubmit = () => { setTrack('start') fire.firestore().collection('users').doc(fire.auth().currentUser.uid).get().then((value) => { console.log("userGroups " + value.data().userGroups) // this returns an object setGroupRef([value.data().userGroups]) }) } useEffect(() => { handleSubmit() }, [track]) console.log("sample list " + groupRef) fire.firestore().collection('groups').onSnapshot(snapshot => ( setGroupList(snapshot.docs.map(doc => doc.data())) ))^ esto devuelve todos los documentos en la colección de grupos. ¿Alguna idea de cómo puedo recuperar solo aquellos de los que el usuario actual es miembro? cualquier ayuda sería muy apreciada. (He estado atascado en esto durante mucho tiempo. También soy nuevo en Firebase).
@DougStevenson me dirigió al camino correcto para usar array-contains, que es una función de ayuda para consultar/obtener datos. el siguiente código es la respuesta a mi problema. esta forma es más corta y más eficiente que el trabajo que se me ocurrió.
fire.firestore().collection('groups').where("groupMembers", "array-contains", fire.auth().currentUser.uid).onSnapshot(snapshot => ( setGroupList(snapshot.docs.map(doc => doc.data())) ))