Solía tener un documento con la siguiente estructura:
ViejoDoc:
members: ['userId1', 'userId2', 'userId3']
Luego escribí una consulta para recuperar todos los documentos relevantes para un usuario:
const docsSnapshot = await getDocs(query( collection(db, 'organisations'), where('members', 'array-contains', user.uid) ))Esto funcionó bien, pero ahora necesito almacenar los nombres de los usuarios además de:
members: [{ id: 'userId1', name: 'John Smith' }, { id: 'userId2', name: 'Jane Smith' }]
El desafío al que me enfrento es que no estoy seguro de cómo construir una consulta que produzca los mismos resultados que la primera, es decir, cómo recupero todos los documentos donde cualquiera de los objetos tiene un atributo de id correspondiente al user.uid
Intenté usar: where('members.id', '==', user.uid) pero eso no funcionó.
¿Se puede construir una consulta para hacer esto?
Firestore no es bueno en este tipo de consultas... Consideraría reestructurar su matriz de miembros para que sea un objeto con user.id como claves.
members : { userId1: { name: "fred" }, userId2: { name: "martha" } } Otra forma, y tal vez más alineada con la forma en que Firestore 'quiere' que lo haga, sería crear otros members de la subcolección con un nuevo documento para cada miembro con el doc.id establecido en user.id.
Este enfoque también le permite agregar fácilmente más datos a cada miembro, con el beneficio adicional de realizar consultas sobre miembros que no solo se basan en el ID de usuario.