es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combina Firestore con las funciones de Firebase.

No tengo ni idea de cómo combinar Firestore con las funciones de Firebase. Quiero verificar algunos campos en un documento y devolver algunos datos si el campo es igual a algo.

Mi código:

const functions = require("firebase-functions");
const admin = require("firebase-admin");

const { getFirestore } = require('firebase-admin/firestore');
const { initializeApp } = require('firebase-admin/app');
const { collection, getDoc, query, where, addDoc } = require("firebase-admin/firestore");


const firebaseConfig = {
...
};

const app = initializeApp(firebaseConfig);

const db = getFirestore(app);
const roomsRef = db.collection("rooms");


exports.test = functions.https.onRequest((request, response) => {
    var { uid, name, password } = request.body;
    var q = query(roomsRef, where("creator_uid", "==", uid), where("name", "==", name));
    if (q)
        var rooms = getDoc(q);
    if (rooms.exist)
        response.send(rooms.data().name)
    else
        response.send("no funcionará xD")
});

Mi error:

enter image description here

¿Qué podría estar saliendo mal? ¿Cómo puedo combinar correctamente Firestore con las funciones?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error es causado porque la función getDoc espera un objeto DocumentReference como argumento, mientras que query devuelve un objeto Query.

    Para realizar una consulta y obtener los datos del primer documento que coincida con la consulta, puedes usar el método get del objeto Query, de la siguiente manera:

    const q = query(roomsRef, where("creator_uid", "==", uid), where("name", "==", name));
    q.get().then((querySnapshot) => {
      if (!querySnapshot.empty) {
        const rooms = querySnapshot.docs[0];
        response.send(room.data().name);
      } else {
        response.send("No se encontraron salas coincidentes.");
      }
    }).catch((error) => {
      console.error("Error al consultar las salas:", error);
      response.status(500).send("Error al consultar las salas.");
    });
    

    En este caso, querySnapshot es un objeto QuerySnapshot que contiene los resultados de la consulta, y querySnapshot.empty es un booleano que indica si hubo algún documento coincidente. querySnapshot.docs es un array de objetos QueryDocumentSnapshot que representan los documentos coincidentes, y en este caso solo estamos obteniendo el primero (si existe) con querySnapshot.docs[0].

    Recuerda manejar los errores correctamente, ya que las consultas y las lecturas de documentos en Firestore pueden fallar por diversos motivos (por ejemplo, permisos, problemas de conexión).

Comments are closed.