Tengo una colección de users de MongoDB con la estructura de documento (simplificada):
{ _id: ObjectId, name: 'John Doe', sportsList: [ // array of objects { name: 'football', level: 1500, levelHistory: [ // array of objects { from: 1450, to: 1500, date: Date }, ... ] }, { name: 'tennis', level: 1400, levelHistory: [ // array of objects { from: 1350, to: 1400, date: Date }, ... ] }, ] } Quiero actualizar el elemento de sportsList que tiene el name === 'tennis' así:
levelHistorylevel Hasta ahora he logrado insertar un nuevo elemento en levelHistory con esta consulta: await User.updateOne( { _id: userId, sportsList: { $elemMatch: { name: 'tennis' } } }, { $push: { 'sportsList.$.levelHistory': { date: Date, from: 1400, to: 1450 } }, // how do I set 'level: 1450' in the same query? // if I tried to use a $set: { 'sportsList.$.level': 1450 } mongoDB throws an error } )Consulta
update( {"_id": 1}, [{"$set": {"sportsList": {"$map": {"input": "$sportsList", "in": {"$cond": [{"$ne": ["$$this.name", "tennis"]}, "$$this", {"$mergeObjects": ["$$this", {"level": 1450, "levelHistory": {"$concatArrays": ["$$this.levelHistory", [{"from": 1400, "to": 1450, "date": 4}]]}}]}]}}}}}])