Quiero actualizar una matriz en un documento donde la matriz es una matriz de objeto de usuario.
El problema es que no quiero agregar duplicados en esta matriz (no el mismo usuario más de una vez).
lo que hago :
const updatedTopic = await Topic.findByIdAndUpdate( // @ts-ignore { _id: id, 'votes.user': { $ne: req.user?._id.valueOf() } }, // @ts-ignore { $push: { votes: { year, comment, user: req.user } } }, { new: true } );Pero esto no funciona como se puede ver a continuación:
{ "name": "Argomento 1", "exam": { "$oid": "62b71b9dcaf3e92ac568c729" }, "slug": "argomento-1", "user": { "$oid": "62534e5798a11bcba35464f6" }, "votes": [ { "year": 2022, "comment": "", "user": { "$oid": "62b22fd314c40b9067f84cc2" -> same user }, "_id": { "$oid": "62b8bbcf876b2d27570fdf86" } }, { "year": 2022, "comment": "", "user": { "$oid": "62b22fd314c40b9067f84cc2" -> same user }, "_id": { "$oid": "62b8bbd5876b2d27570fdf89" } } ], "createdAt": { "$date": { "$numberLong": "1656168790097" } }, "updatedAt": { "$date": { "$numberLong": "1656274729989" } }, "__v": 0 }No sé por qué, pero cambiar findByIdAndUpdate por findOneAndUpdate funciona bien.
Probablemente findByIdAndUpdate solo verifique la condición de identificación.