Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

266
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!