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

92
Visualizações
Empuje a una matriz anidada o empuje a la matriz en función de la identificación del elemento - MongoDb node.js

tengo este esquema:

 ... recommended:{ type:[{ movieId:String, recommendedBy:[String] }], default:[], }, name: { type: String, }

de la solicitud obtengo movieId e id . Quiero agregar a la matriz recommended un nuevo objeto si ya no hay otro elemento con el mismo movieId allí, y agregar la id a la matriz anidada recommendedBy por en ambos casos.

hasta ahora tengo esto:

 const user = User.findByIdAndUpdate({_id:'123'}, {$AddToSet:{'recommended.$[movie].recommendedBy':id}}, {arrayFilters:[{'movie.movieId':movieId}]})

esto solo establecerá el recommendedBy por un elemento ya existente con el mismo movieId , pero no insertará un nuevo objeto con la nueva propiedad movieId . (así que básicamente es $ AddToSet para ambas matrices) ¿Cómo podría lograr eso? ¡Gracias!

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

0

Tal vez necesite algo simple como esto que esté haciendo upsert o update para el elemento de matriz recomendado:

 db.collection.update({}, [ { $set: { recommended: { "$reduce": { "input": "$recommended", "initialValue": // assign your edit data as init value [ { "movieId": "1", "recommendedBy": "who recommended" } ], "in": { "$cond": { "if": { $in: [ "$$this.movieId", "$$value.movieId" ] }, "then": "$$value", "else": { "$concatArrays": [ "$$value", [ "$$this" ] ] } } } } } } } ])

explicado:

  1. Sin filtro, pero puede agregar cualquier cosa en el filtro de documentos inicial para buscar solo un conjunto limitado de documentos.
  2. En la etapa de actualización, usa $reduce para verificar los elementos de matriz de entrada que necesita modificar o actualizar el valor en el elemento de matriz afectado.

(Confirmado para trabajar en mongod 4.4)

patio de juegos

about 4 years ago · Juan Pablo Isaza Relatório

0

No pude entender la respuesta de @ R2D2, así que se me ocurrió esta solución que funciona inesperadamente bien para mí, ya que también necesito poder eliminar el movieId y todo lo recommendedBy por él.

Cambié mi esquema a esto:

 recommanded:{ type: Map, of:[String], default:{} },

Estoy eliminando / agregando con:

 User.findByIdAndUpdate({_id:"123",{$addToSet:{[`recommended.${movieId}`]:id}})

Y

 User.findByIdAndUpdate({_id:"123",{$unset:{[`recommended.${movieId}`]:""}})
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