MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Rimuovere le voci dell'array che contengono un array vuoto

Non so cosa hai provato poiché semplicemente non è incluso nella tua domanda, ma il modo migliore per verificare la presenza di un array vuoto è fondamentalmente guardare dove 0 l'indice non corrisponde a $exists :

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

    }
)

La parte "query" di .update() istruzione sta facendo in modo che tentiamo anche solo di toccare i documenti che hanno un array vuoto in "products.rates" . Ciò non è richiesto, ma evita di testare la seguente condizione dell'istruzione "aggiornamento" su documenti in cui tale condizione non è true per qualsiasi elemento dell'array, e quindi rende le cose un po' più veloci.

La parte "aggiornamento" effettiva si applica $pull sul "products" array per rimuovere tutti gli elementi in cui il "rates" "interiore". è un array vuoto. Quindi il "percorso" all'interno di $pull sta effettivamente guardando all'interno dei "products" contenuto comunque, quindi è relativo a quello e non all'intero documento.

Naturalmente $pull rimuoverà tutti gli elementi che corrispondono in una singola operazione. Il "multi" è necessario solo quando vuoi davvero aggiornare più di un documento con la dichiarazione