Entonces, estoy pensando en implementar una propiedad de games como esta,
{ games: { won: 2, lost: 3, played: 5, winRatio: 40 } }Quiero modificar la proporción de juegos cada vez que agrego datos de juegos ganados/perdidos. Por ejemplo, si en el ejemplo anterior el jugador gana otro juego, entonces las operaciones serían,
Entonces, { $inc: { won: 1, played 1 } } y algunas otras cosas. Entonces, ¿cómo lo hago? Una respuesta obvia es buscar datos, hacer cálculos y enviar datos. Pero no quiero hacerlo. Quiero hacer esto con los métodos y operadores de MongoDB. ¿Es posible?
Consulta
$set , actualiza winRation, en función de los valores calculados previamente. update( {}, [{"$set": {"games.won": {"$cond": [{"$gt": [-2, 0]}, {"$add": ["$games.won", -2]}, "$games.won"]}, "games.lost": {"$cond": [{"$lt": [-2, 0]}, {"$add": ["$games.lost", {"$abs": -2}]}, "$games.lost"]}, "games.played": {"$add": ["$games.played", {"$abs": -2}]}}}, {"$set": {"games.winRatio": {"$multiply": [100, {"$divide": ["$games.won", "$games.played"]}]}}}])Editar
Puede simplificar la consulta y verificar también en su controlador, también si sabe que el juego siempre es 1 ganado o perdido, puede escribir algo como el belloq en su controlador (también puede tener una variable y escribirlo sin si /else, variable js en games.won o games.lost)
if(won) update( {}, [{"$set": {"games.won": {"$add": ["$games.won", 1]}, "games.played": {"$add": ["$games.played", 1]}}}, {"$set": {"games.winRatio": {"$multiply": [100, {"$divide": ["$games.won", "$games.played"]}]}}}]) else update( {}, [{"$set": {"games.lost": {"$add": ["$games.lost", 1]}, "games.played": {"$add": ["$games.played", 1]}}}, {"$set": {"games.winRatio": {"$multiply": [100, {"$divide": ["$games.won", "$games.played"]}]}}}])