• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

322
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

about 3 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) ] } ] } } } } } ] )
about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda