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

364
Vistas
MongoDB Agregar campo en una matriz anidada por otro campo

Hola, tengo una colección simple:

 { _id: 1, books: [ { bookId: 55, c: 5}, { bookId: 66, c: 6}, { bookId: 77, c: 7}, ] }

¿Cómo puedo agregar un nuevo campo calculando otro campo? aquí agrego el campo "Z" al objeto encontrado actual en la matriz anidada calculando el campo "C"

 updateOne( { _id : 1, 'books.bookId' : 66 } , { [ { $addFields: { "books.$.z" : { "$sum" : ["$books.$.c", 1] } } } ] }

Resultado Esperado:

 { _id: 1, books: [ { bookId: 55, c: 5}, { bookId: 66, c: 6, z:7}, { bookId: 77, c: 7}, ] }

Creo que hay una entrada corta (¡¿posiblemente usando el nuevo $getField?!), Creo que mango todavía puede combinar 'operador de posición $' + ('referencia del operador variable por prefijo $' o 'combinar con $getField') cómo probar en mi muestra

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

0

Use la canalización de agregación en el método de actualización para aprovechar los operadores $map , $mergeObjects y $cond para lograr los resultados deseados:

 .updateOne( // The query will find docs where *at least* one bookId in the // books array equals 66 -- but remember it does not pinpoint // the location in the array! We will tackle that in the update // pipeline to follow... { _id: 1, 'books.bookId': 66 }, [ { $set: { books: { $map: { input: '$books', in: { $mergeObjects: [ '$$this', { $cond: [ { $eq: ['$$this.bookId', 66] }, // IF books.bookId == 66 { z: { $sum: ['$$this.c', 1] } }, // THEN merge a new field 'z' with calced value null // ELSE merge null (a noop) ] } ] } } } } } ] )
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