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

91
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!

about 4 years ago · Juan Pablo Isaza
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 juegos

about 4 years ago · Juan Pablo Isaza 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}`]:""}})
about 4 years ago · Juan Pablo Isaza 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