Estoy tratando de averiguar qué estoy haciendo incorrectamente aquí cuando quiero actualizar solo un valor de mi campo en el almacén de incendios, pero en lugar de eso, ¿se reemplazó todo el campo?
también, por alguna razón, mi variable de date parece convertirse directamente en la date de la cadena en firestore en lugar del valor que contiene.
Aquí está mi código para actualizar el Doc:
export async function addLikesToFeed(date, likes){ try{ // it literally updates to {'date': 'likes: 1'} await updateDoc(doc(db, 'Bulletin', `bulletin`), { date: {likes: likes+1}}) } catch(error){ console.log('error updating Likes at addLikesToFeed: ', error.message) } } La siguiente es una captura de pantalla de mi firestore. Si '05-02-2022' en la parte de la date , se vuelve como lo que ves en la imagen. Si mantuve la date como se ve en el código, se convierte en la parte date like .
la variable de date contiene una cadena y likes es un número.
Quiero que mi función funcione para que cuando haga clic en mi botón agregue un Me gusta al valor en la parte Me likes , y estoy tratando de averiguar por qué no puedo hacer eso.
Gracias
Si desea utilizar el valor de la date como nombre de campo, puede utilizar la notación [] :
await updateDoc(doc(db, 'Bulletin', `bulletin`), { [date]: {likes: likes+1}}) Sin embargo, esto seguirá reemplazando todo el campo para esa fecha. Si desea actualizar solo el subcampo Me likes , puede usar la notación de puntos para actualizar campos en objetos anidados:
await updateDoc(doc(db, 'Bulletin', `bulletin`), { [date+".likes"]: likes+1}) Finalmente, Firestore en realidad tiene un operador incorporado para incrementar valores , lo que evita condiciones de carrera cuando varios usuarios actualizan los valores de likes casi al mismo tiempo.