es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo limpiar un array de objetos vacíos en mongodb?

Después de una agregación en mongodb, obtengo estos resultados:

[
  my_arr:[
    {
      id: ObjectId('618f7ef057c2923be10d1111')
      //otras cosas
    },
    {},
    {},
  ]
]

¿Existe una manera de eliminar los objetos vacíos directamente en la agregación o es necesario hacerlo en el servidor? Esto sucede después de desenrollar y agrupar.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de eliminar los objetos vacíos directamente en la agregación usando la etapa de pipeline $match. Puede agregar la siguiente etapa a su pipeline para eliminar los objetos vacíos:

    { $match: { 'my_arr': { $elemMatch: { $ne: {} } } } }
    

    Esto coincidirá solo con los documentos donde la matriz my_arr contiene al menos un objeto no vacío. Los documentos resultantes no tendrán objetos vacíos en la matriz my_arr.

    Alternativamente, también puede usar la etapa de pipeline $redact con el mismo operador $ne para lograr el mismo resultado:

    {
      $redact: {
        $cond: {
          if: { $ne: [{ $type: "$my_arr" }, "array"] },
          then: "$$DESCEND",
          else: {
            $cond: {
              if: { $anyElementTrue: { $map: { input: "$my_arr", as: "el", in: { $ne: ["$$el", {}] } } } } },
              then: "$$KEEP",
              else: "$$PRUNE"
            }
          }
        }
      }
    }
    

    Esto iterará recursivamente sobre los documentos y sus subdocumentos usando los operadores $descend y $prune, y mantendrá solo los elementos no vacíos usando el operador $keep.

Comments are closed.