Tengo estos códigos para hacer la funcionalidad Me gusta
/*Here I increment by 1 every time someone submit like*/ db.collection("post").doc(postId).update({ likes: increment }) /*Here I collect the uid of the user who submit Like and append to an Array*/ db.collection('post').doc(postId).update( { usersArray: firebase.firestore.FieldValue.arrayUnion( userId ) });¿ahora es posible tener un código que se ejecuta cada vez que alguien envía Me gusta para verificar si el usuario ya existe en usersArray?
Antes de actualizar el documento de post , primero debe leerlo para verificar si el ID de usuario ya está incluido en la usersArray userId
Para ello, deberá utilizar una Transacción para asegurarse de que el documento no se modificó entre el momento en que lo leyó para verificar el Array y el momento en que lo actualizó.
const postDocRef = db.collection('post').doc(postId); return db .runTransaction((transaction) => { // This code may get re-run multiple times if there are conflicts. return transaction.get(postDocRef).then((postDoc) => { if (!postDoc.exists) { throw 'Document does not exist!'; } if (postDoc.data().usersArray.includes(userId)) { throw 'User has already liked this post!'; } const newLikes = postDoc.data().likes + 1; transaction.update(postDocRef, { usersArray: firebase.firestore.FieldValue.arrayUnion(userId), likes: newLikes, }); }); }) .then(() => { console.log('Transaction successfully committed!'); }) .catch((error) => { console.log('Transaction failed: ', error); }); Tenga en cuenta que incluso con este código, los usuarios malintencionados aún pueden usar sus datos de configuración con su propio código para escribir su UID en la matriz por segunda vez. Para evitar esto, querrá escribir reglas de seguridad para permitir solo agregar el UID si aún no está en la matriz (comparando request.resource con resource ).
Use las funciones de la nube para los incrementos de contador, como los me gusta de las publicaciones. Podemos obtener el valor actualizado y anterior del documento en el activador de la función onUpdate en la recopilación de publicaciones, luego podemos verificar si el usuario ya está incluido en userArray e incrementar/disminuir el conteo de Me gusta en consecuencia.