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

464
Vistas
cómo eliminar un elemento en una matriz anidada en mongo

Necesito eliminar el elemento en la matriz anidada, el siguiente es mi documento

 { "_id" : ObjectId("58760d8caa30c585ef8d3beb"), "results" : [ { "item" : "A", "score" : 5.0, "answers" : [ { "q" : 1.0, "a" : 4.0 }, { "q" : 1.0, "a" : 5.0 }, { "q" : 2.0, "a" : 6.0 } ] }, { "item" : "B", "score" : 8.0, "answers" : [ { "q" : 1.0, "a" : 7.0 }, { "q" : 1.0, "a" : 5.0 }, { "q" : 2.0, "a" : 9.0 } ] } ] }

Quiero eliminar todos los elementos en las respuestas que q sean iguales a 1.0, el siguiente es el documento esperado:

 { "_id" : ObjectId("58760d8caa30c585ef8d3beb"), "results" : [ { "item" : "A", "score" : 5.0, "answers" : [ { "q" : 2.0, "a" : 6.0 } ] }, { "item" : "B", "score" : 8.0, "answers" : [ { "q" : 2.0, "a" : 9.0 } ] } ] }

Solía:

 db.getCollection('test').update({"results.answers.q":1}, { $pull: {"results.$.answers": {q:1} } }, { multi: true })

pero tengo:

 { "_id" : ObjectId("58760d8caa30c585ef8d3beb"), "results" : [ { "item" : "A", "score" : 5.0, "answers" : [ { "q" : 2.0, "a" : 6.0 } ] }, { "item" : "B", "score" : 8.0, "answers" : [ { "q" : 1.0, "a" : 7.0 }, { "q" : 1.0, "a" : 5.0 }, { "q" : 2.0, "a" : 9.0 } ] } ] }

en el elemento B todavía hay documentos incrustados que q equivalen a 1

¿Como lo puedo hacer?

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

0

Desafortunadamente, no hay forma de lograr este resultado con una sola consulta, a menos que alguien pueda pensar en algo realmente inteligente con el operador $where . El uso del operador posicional implica que solo puede apuntar a un único elemento de matriz (en su caso, es un único elemento de results ), y este uso es imprescindible en cualquier extracción de subarreglo.

Una solución fea aquí es realizar esta actualización N veces, donde N es la longitud de la matriz de results . Este enfoque hará el trabajo, pero obviamente será un gran problema de rendimiento si estos arreglos son grandes.

over 4 years ago · Santiago Trujillo Denunciar

0

usar la siguiente consulta funcionará para usted. Para obtener más información sobre $pull, visitehttps://docs.mongodb.com/manual/reference/operator/update/pull/

 db.getCollection('test').update({},{ $pull: {"results":{"answers": {$elemMatch:{q:1} }} }},{ multi: true });
over 4 years ago · Santiago Trujillo Denunciar

0

Ahora puede lograr esto con $pull, según los documentos de MongoDB: https://docs.mongodb.com/manual/reference/operator/update/pull/#pull-array-of-documents

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