Estoy tratando de consultar una serie de objetos de mi base de datos de Firestore, probé muchos métodos, como array-contains , array-contains-any , in , pero fue en vano.
Tengo una matriz de usuarios, y es una matriz de objetos, cada objeto tiene dos propiedades: id y rol. Quiero escribir una consulta que obtendrá selectivamente un documento en el que el usuario que ha iniciado sesión actualmente está presente en la matriz del usuario.
db.collection('chatRooms') .where(/* What am I supposed to do here */) .get() .then((snapshot) => { setRooms( snapshot.docs.map((room) => { return { id: room.id, data: room.data() }; }) ); });Aquí hay una instantánea de cómo estoy almacenando los datos:

Para usar array-contains en una matriz de objetos, debe conocer el objeto completo. Parece factible en este caso si también conoce el UID del usuario y el rol actuales. Intenta ejecutar la siguiente consulta:
const userId = firebase.auth().currentUser.uid db.collection('chatRooms') .where('users', 'array-contains', { id: userId, role: 'Admin' }) .get() .then((snapshot) => { setRooms( snapshot.docs.map((room) => { return { id: room.id, data: room.data() }; }) ); });¡La consulta anterior devolverá documentos donde la matriz de usuarios contiene el UID del usuario actual con el rol de 'Administrador' solamente! Actualmente no hay forma de consultar en función de un solo campo en la matriz de objetos.
Si no conoce el rol del usuario, es posible que deba almacenar a los usuarios como una subcolección en lugar de una matriz.