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.

Flutter Firestore Update Where Actualizar en Flutter Firestore donde

Estoy intentando ejecutar una consulta que recupera una sola fila dada una cláusula where y la actualiza. Entiendo que Firebase no admite operaciones de “UpdateWhere”, por lo que estoy intentando usar una “Transaction” en su lugar.

Estoy teniendo dificultades para hacer que funcione, tal vez estoy demasiado acostumbrado a las bases de datos SQL… Aquí está mi código incorrecto:

try {
    final whereQuery = _db
        .doc(userPath(user))
        .collection("someInnerCollection")
        .where("active", isEqualTo: true)
        .limit(1);

   await _db.runTransaction((transaction) async {
        final entry = await transaction.get(whereQuery);  // Esto no compila ya que "get" no acepta una consulta
        await transaction.update(entry, {
            "someValue": "newValue",
        });
    });

} catch (e) {
    ...
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para recuperar una sola fila con una cláusula where y actualizarla en Firebase, puedes usar una transacción de la siguiente manera:

    try {
      final collectionRef = _db.collection('someCollection');
      final querySnapshot = await collectionRef
          .where('field', isEqualTo: 'value')
          .limit(1)
          .get();
      if (querySnapshot.docs.isNotEmpty) {
        final docSnapshot = querySnapshot.docs.first;
        await _db.runTransaction((transaction) async {
          await transaction.update(docSnapshot.reference, {
            'field': 'nuevo valor',
          });
        });
      }
    } catch (e) {
      // manejar error
    }
    

    En el ejemplo anterior, primero obtenemos la referencia de la colección para la colección que queremos consultar. Luego, agregamos la cláusula where y limitamos los resultados a uno usando el método limit. Luego, utilizamos el método get para obtener la instantánea de la consulta.

    Si la instantánea tiene algún documento, obtenemos el primer documento y lo utilizamos para iniciar una transacción. En la transacción, actualizamos el documento pasando la referencia del documento y un mapa de los campos a actualizar.

    Ten en cuenta que querySnapshot.docs es una lista de objetos QueryDocumentSnapshot, y docSnapshot es un objeto DocumentSnapshot obtenido del primer elemento de esa lista. Necesitamos usar la propiedad reference del objeto DocumentSnapshot para actualizar el documento en la transacción.

    Además, asegúrate de que tu instancia de Firebase esté configurada correctamente, con los permisos y credenciales correctos, y de que hayas importado los paquetes necesarios para Flutter y Firebase.

Comments are closed.