Tengo un documento mongo db como este
id: ObjectId(asdlkjjas_48@$#), _user: 4593oawifjaslef, country: { US: false, CA: false, MX: false, FR: false } name: "kevin" age: 28Recibo una solicitud de publicación de la interfaz con el objectId (necesario para consultar este documento) y también un código de país
Entonces, mi usuario envía su ID y código de país al backend, necesito actualizar el documento que coincide con esa identificación y solo actualizar el código de país que está anidado en el país.
Intento algo como esto
incomingNumber = await Collection.findById(numberId) // get our document by id const code = 'US' // get our country code collection.updateOne({_id: incomingNumber}, {$set: { country[code]: true }}) //trying to update only the field in country(object) that matches our supplied country code(ex. 'US')Alguien publicó la respuesta durante unos segundos y luego la eliminó, vuelva a publicar su respuesta y le daré crédito.
la respuesta es a
Collection.updateOne({_id: incomingNumber}, {$set: { country: { [code]: true}}})Básicamente necesitaba un corsé extra. Esto funciona para mí en esta situación, sin embargo, el objeto del país ahora se verá así
{ US: true },Yo preferiria tener
{ US: true, FR: false, MX: false, CA: false }Para preservar el objeto de country y retener las claves que no están actualizadas, puede usar literales de plantilla ya que es mangosta o usar corchetes,
Collection.updateOne({_id: objectId}, {$set: { ["country."+code]: true}})o
Collection.updateOne({_id: objectId}, {$set: { `country.${code}`: true}})