Este es el resultado final que me gustaría obtener.
{ '_id': '2022-08-06', 'users': [ { 'id': '345456', point: 1, }, ], };Estoy probando estos, pero no funciona. Muchas gracias por su respuesta.
client.db(dbProject).collection('test').updateOne({ '_id': data.id, users: { $elemMatch: { id: data.id2 } } }) client.db(dbProject).collection('test').findOneAndUpdate( { '_id': data.id, users: { $elemMatch: { id: data.id2 } }, }, { $addToSet: { 'users': { id: data.id } }, $inc: { 'users.point': decimal(String(data.point)) } }, { upsert: true, })Puede lograr esto usando la sintaxis de actualización de canalización de agregación, así:
client.db(dbProject).collection("test").updateOne( { "_id": data.id }, [ { $set: { users: { $ifNull: [ "$users", [] ] } } }, { "$set": { "users": { $concatArrays: [ { $map: { input: "$users", in: { $mergeObjects: [ "$$this", { $cond: [ { $eq: [ "$$this.id", data.id2 ] }, { point: { $sum: [ "$$this.point", 1 ] } }, {} ] } ] } } }, { $cond: [ { $in: [ data.id2, "$users.id" ] }, [], [ { id: data.id2, point: 1 } ] ] } ] } } }, ], { "upsert": true })