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

130
Visualizações
MongoDB actualiza el elemento anidado por ID dinámico

Hola, estoy tratando de actualizar un objeto anidado en mi MongoDB.

Ellos estructuran es

 [ { "_id": "5871010d1ff9831574e7178d", "created_at": "2017-01-07T14:54:05.791Z", "updated_at": "2017-01-07T14:54:05.791Z", "place_id": "ChIJ1eTO6eS1vkcRL_mX2RWUKo4", "name": "Kunstwerk Restaurant Gummersbach", "__v": 0, "cooks": [], "menus": [ { "58727068ba8d6c04a0ea331f": [ { "intolerances": { "intolerance" : "false" ... }, "nutritiondata" : [ {...} ], "cookname": "testkoch@test.de", "menuname": "MenünameX" } ] } ]

La ID anidada en los menús es otra ID de un documento MongoDB que se crea dinámicamente.

Intento actualizar el nombre del menú, pero no puedo acceder a él, ya que mongo siempre devuelve un valor nulo o no encuentra el elemento, ya que solo necesito buscar la clave, no el par clave-valor.

Lo que probé hasta ahora:

 db.restaurants.update({ 'menus.58727068ba8d6c04a0ea331f', { $set : {"menus.$.menuname" : "test"}}}); db.restaurants.findOne({ 'menus.58727068ba8d6c04a0ea331f' : "58727068ba8d6c04a0ea331f"}); db.restaurants.find({ menus : { $elemMatch : {"58727068ba8d6c04a0ea331f": "58727068ba8d6c04a0ea331f" }}}); db.restaurants.findOne({ menus : { $eq : "58727068ba8d6c04a0ea331f" }});
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Use el método $set como se muestra a continuación:

 db.restaurants.update({"_id":"5871010d1ff9831574e7178d"}, {$set: {"menus.58727068ba8d6c04a0ea331f.0.menuname":"test"});

Esto funcionará solo si conoce el índice del elemento en la matriz que se está actualizando. Consulte esta página , tiene algunos buenos ejemplos sobre la actualización de matrices anidadas de varios niveles, espero que ayude.

over 4 years ago · Santiago Trujillo Relatório

0

Entonces, gracias a Suzo, descubrí la solución. El código de MongoShell que funciona:

 db.restaurants.update({"_id" : ObjectId("5871010d1ff9831574e7178d")}, {$set: {"menus.58727068ba8d6c04a0ea331f.0.menuname" : "testName"}});

ACTUALIZACIÓN: Dado que mi campo es de tipo Mixto, ¡esto no se actualiza sin ser marcado!. Así que aquí está el código correcto completo:

 Restaurant.findOne({ _id : req.body.r_id }, function(error, restaurant){ if(error) console.log(error); for(var i = 0; i < restaurant.menus.length; i++){ restaurant.markModified('menus'); if(restaurant.menus[i][req.params.id] != undefined){ restaurant.menus[i][req.params.id].menuname = req.body.name; } if(i == restaurant.menus.length-1){ restaurant.save(); res.json(jObj); } } })
over 4 years ago · Santiago Trujillo 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