sql >> Base de Datos >  >> NoSQL >> MongoDB

Eliminar entradas de matriz que contienen una matriz vacía

No sé lo que intentó, ya que simplemente no está incluido en su pregunta, pero la mejor manera de verificar si hay una matriz vacía es básicamente mirar dónde está el 0 el índice no coincide con $exists :

Inventory.update(
    { "products.rates.0": { "$exists": false } },
    { 
        "$pull": {
            "products": { "rates.0": { "$exists": false } }
        }
    },
    { "multi": true },
    function(err,numAffected) {

    }
)

La parte de "consulta" de .update() La declaración se asegura de que solo intentemos tocar documentos que tienen una matriz vacía en "products.rates" . Eso no es obligatorio, pero evita probar la siguiente condición de declaración de "actualización" en documentos donde esa condición no es true para cualquier elemento de matriz y, por lo tanto, hace que las cosas sean un poco más rápidas.

Se aplica la parte de "actualización" real $pull en los "products" matriz para eliminar cualquiera de esos elementos donde el "interno" "rates" es una matriz vacía. Así que la "ruta" dentro del $pull en realidad está mirando dentro de los "products" contenido de todos modos, por lo que es relativo a eso y no a todo el documento.

Naturalmente $pull eliminará todos los elementos que coincidan en una sola operación. El "multi" solo es necesario cuando realmente desea actualizar más de un documento con la declaración