Tengo dos matrices en la base de datos en tiempo real de Firebase que administrarán los seguidores de los usuarios y los siguientes. Creé esta función en mi aplicación vue que agregará el seguimiento si un usuario hace clic en el botón en el perfil de otro usuario y lo siguiente en el perfil del usuario que hizo clic:
async followUser() { await update(ref(db, 'Users/'+ this.profileKey), { followers: [store.currentUser.uid] }) await update(ref(db, 'Users/'+ store.currentUserKey), { following: [this.$route.params.uid] }) }De momento he probado en dos perfiles que he creado ad-hoc y la función actúa como esperaba pero tengo una duda al respecto. Si el usuario comienza a seguir a otros usuarios, ¿se agregarán correctamente las nuevas entradas a la matriz existente o se sobrescribirán todos los datos? ¿Cuál es la forma correcta de insertar o eliminar el valor en una matriz almacenada en la base de datos en tiempo real de Firebase?
No existe una forma atómica de agregar o eliminar un elemento de una matriz en la API de base de datos en tiempo real de Firebase. Tendrá que leer toda la matriz, agregar el elemento y volver a escribir la matriz.
Sería mejor almacenar los followers y followings como mapas en lugar de matrices, con valores de true (ya que no puede tener una clave sin un valor en Firebase. Si hiciera eso, agregar un nuevo seguidor de usuario sería:
set(ref(db, 'Users/'+ this.profileKey+'/followers/'+store.currentUser.uid), true)Y eliminar un seguimiento sería:
set(ref(db, 'Users/'+ this.profileKey+'/followers/'+store.currentUser.uid), null)O
remote(ref(db, 'Users/'+ this.profileKey+'/followers/'+store.currentUser.uid))Consulte también: Prácticas recomendadas: arreglos en Firebase .