Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

126
Visualizações
Cómo actualizar un elemento específico del objeto en la matriz del documento mongdb

Supongamos que tenemos la siguiente colección, sobre la cual tengo pocas preguntas:

 { "_id" : ObjectId("4faaba123412d654fe83hg876"), "user_id" : 123456, "total" : 100, "items" : [ { "item_name" : "my_item_one", "price" : 20 }, { "item_name" : "my_item_two", "price" : 50 }, { "item_name" : "my_item_three", "price" : 30 } ] }

En este caso, tengo que actualizar item_name O precio a la vez o tal vez ambos al mismo tiempo.

Por ejemplo: si proporciono item_name en req.body, solo debería actualizar item_name y el precio sigue siendo el mismo, pero si proporciono el precio, debería hacerlo al revés.

Básicamente, quiero decir que solo debe actualizar ese campo que se proporciona en req.body.

probé esto

 const result = await User.updateOne( { user_id: 123456, 'items.item_name': 'my_item_two', }, { $set: { items: req.body } } )

¡Pero esto está haciendo lo mismo que quería pero está eliminando los campos restantes que ya están allí!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que puedes crear el objeto $set en JS y luego pasarlo a la consulta de esta manera:

 // body is to mock req.body const body_1 = { item_name: "new_name", price: 1 } const body_2 = { item_name: "new_name_2" } const body_3 = { price: 2 } const getSetObject = (body) => { update = { $set: {} } Object.keys(body).forEach(k => { update.$set[`items.$.${k}`] = body[k] }) return update } console.log(getSetObject(body_1)) console.log(getSetObject(body_2)) console.log(getSetObject(body_3))

Tenga en cuenta cómo esto crea los objetos utilizados en estas consultas:

  • dos valores
  • Un valor (item_name)
  • Un valor (precio)

Entonces puedes crear la consulta:

 const result = await User.updateOne( { user_id: 123456, 'items.item_name': 'my_item_two', }, setObj )
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda