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) {
...
}
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: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étodolimit
. Luego, utilizamos el métodoget
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 objetosQueryDocumentSnapshot
, ydocSnapshot
es un objetoDocumentSnapshot
obtenido del primer elemento de esa lista. Necesitamos usar la propiedadreference
del objetoDocumentSnapshot
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.