Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
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!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

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 recreo

over 4 years ago · Santiago Trujillo Denunciar

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}`]:""}})
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda