Tengo una colección de documentos en una base de datos de Firestore. Todos los documentos tienen un campo llamado "deudorEmail", pero solo algunos de ellos tienen también un campo llamado "acreedorEmail". Quiero leer todos los documentos en los que "creditorEmail" está ausente. Según la documentación de Firestore:
const notCapitalQuery = query(citiesRef, where("capital", "!=", false));Esta consulta no devuelve documentos de ciudad donde el campo de capital no existe. Las consultas no iguales (!=) y no incluidas excluyen documentos en los que el campo dado no existe.
Mi código es el siguiente:
const docCollection = collection(db, "requests"); const dataSection = document.getElementById("data-section"); const qRequests = query(docCollection, where("creditorEmail", "!=", false));pero esta consulta entrega precisamente aquellos documentos en los que existe acreedorEmail. Si cambio "falso" por "verdadero", la consulta arroja los mismos resultados. Es como si la condición "!=" no funcionara. ¿Alguien tiene alguna idea de lo que está mal?
Las consultas de Firestore siempre se basan en la información que existe sobre un documento en el índice que se usa en esa consulta, y si el documento no tiene un campo, no se incluirá en un índice en ese campo.
Así que lo que estás viendo es el comportamiento esperado.
Considere darle al campo un valor predeterminado, como una cadena vacía para campos de cadena. De esa forma, el documento estará presente en los índices sobre/incluido ese campo.
Ver también:
Actualización: para probar su caso, creé una colección 69963042 con tres documentos:
fDmsBjxCdg3xygzjxZo0 sin datos en absoluto.lxRXLFHoG2NPtC1brv2D con un campo de capital establecido en false .wnXLanoHLacRoblnJ7wo con un campo de capital establecido en true .Luego ejecuté tres consultas:
const q = query( collection(db, "69963042"), where("capital", "!=", false) ); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(`${doc.id}: capital=${doc.get("capital")}`) })Esto registra:
"wnXLanoHLacRoblnJ7wo: mayúscula=verdadero"
Cambiar la condición a where("capital", "!=", true) , conduce al registro de:
"lxRXLFHoG2NPtC1brv2D: mayúscula=falso"
Y finalmente, cambiar la condición a where("capital", "==", false) , conduce al registro:
"lxRXLFHoG2NPtC1brv2D: mayúscula=falso"
Ninguna de las consultas devuelve el documento sin el campo de capital , que funciona como se esperaba.
Para obtener el código y la configuración de mi base de datos en caso de que quiera probarse a sí mismo, consulte https://jsbin.com/hudayez/edit?html,console