Estoy creando una aplicación web de foro en la que al usuario le puede gustar/no gustar la publicación de otros usuarios.
Tengo el siguiente modelo, que representa una publicación:
[ { _id:"0002253, title:"My first post", likes:[], dislikes:[] }, { _id:"0002254, title:"My second post", likes:[], dislikes:[] }, { _id:"0002255, title:"My third post", likes:[], dislikes:[] }, ]Cuando un usuario envía un me gusta o no me gusta, la identificación de este último se insertará en la matriz correspondiente (me gusta o no me gusta).
Cada usuario puede, para cada publicación, insertar solo un me gusta o un disgusto (no ambos).
La consulta que utilicé para la inserción es la siguiente:
let vote_result = await Poll.updateOne( { _id: poll_id, $and: [ { "likes": { $nin: [MY_ID] } }, { "dislikes": { $nin: [MY_ID] }}, ], }, { $addToSet: { "likes": MY_ID, }, },Entonces, en teoría, la consulta debe insertar MY_ID en la matriz de gustos o disgustos si y solo si MY_ID no está presente en ninguna de las matrices.
El problema es que la consulta aún escribe MY_ID en la matriz de Me gusta (incluso si MY_ID está presente en No me gusta) y viceversa.
Supongamos ahora que quiero dejar un 'Me gusta' en una publicación:
Fase 1:
likes:[] dislikes:[](Puedo gustar o disgustar, funciona).
Fase 2:
likes: [MY_ID] dislikes:[](No puedo volver a enviar Me gusta, funciona, pero todavía puedo no me gusta; no debería permitirme votar nuevamente).