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

268
Vistas
Edite múltiples objetos en una matriz usando mangosta (MongoDB)

Así que probé de varias formas, pero no puedo, puedo modificar varios objetos con la misma clave pero no puedo modificar ninguno con diferentes claves, si alguien me puede ayudar es un problema bastante complejo

 { id: 123, "infos": [ { name: 'Joe', value: 'Disabled', id: 0 }, { name: 'Adam', value: 'Enabled', id: 0 } ] };

En mi base de datos tengo una colección con una matriz y varios objetos dentro que dan esto.

Quiero modificar estos objetos, filtrar por su nombre y modificar el valor.

Para darle un mejor ejemplo, mi sitio me devuelve un objeto con los nuevos datos, y quiero modificar el objeto de la base de datos con el nuevo objeto, sin borrar la matriz, la clave del nombre nunca cambia.

 const object = [ { name: 'Joe', value: 'Hey', id: 1 }, { name: 'Adam', value: 'None', id: 1 } ]; for(const obj in object) { Schema.findOneAndUpdate({ id: 123 }, { $set: { [`infos.${obj}.value`]: "Test" } }) }

Este código funciona pero no está optimizado, hace varias solicitudes, me gustaría hacer todo en una sola solicitud, y además no actualiza la identificación, solo el valor.

Si alguien me puede ayudar sería genial, he buscado por todos lados y no encuentro nada

Mi estructura de esquema

 new Schema({ id: { "type": String, "required": true, "unique": true }, infos: [] })

Uso el método $addToSet para insertar objetos en la matriz de infos .

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Prueba esto :

 db.collection.update({ id: 123, }, { $set: { "infos.$[x].value": "Value", "infos.$[x].name": "User" } }, { arrayFilters: [ { "x.id": { $in: [ 1 ] } }, ], multi: true })
  1. El operador $[] todo posicional actúa como un marcador de posición para todos los elementos en el campo de matriz.

  2. En $in puede usar una array dinámica de id. Ex :

    identificadores constantes = [1,2,..n]

    db.collection.update( //Same code as it is... { arrayFilters: [ { "x.id": { $in: ids } }, ], multi: true })

Enlace de MongoPlayGround: https://mongoplayground.net/p/Tuz831lkPqk

about 4 years ago · Juan Pablo Isaza Denunciar

0

Tal vez busques algo como esto:

 db.collection.update({}, { $set: { "infos.$[x].value": "test1", "infos.$[x].id": 10, "infos.$[y].value": "test2", "infos.$[y].id": 20 } }, { arrayFilters: [ { "x.name": "Adam" }, { "y.name": "Joe" } ], multi: true })

Explicado:

Usted define arrayFilters para todos los nombres en los objetos que tiene y actualiza los valores y la identificación en todos los documentos...

patio de juegos

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