MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Supprimer les entrées de tableau contenant un tableau vide

Je ne sais pas ce que vous avez essayé car il n'est tout simplement pas inclus dans votre question, mais la meilleure façon de vérifier un tableau vide est de regarder essentiellement où le 0 l'index ne correspond pas à $exists :

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

    }
)

La partie "requête" du .update() s'assure que nous n'essayons même de toucher que les documents qui ont un tableau vide dans "products.rates" . Ce n'est pas obligatoire, mais cela évite de tester la condition d'instruction "update" suivante sur les documents où cette condition n'est pas true pour n'importe quel élément du tableau, et rend ainsi les choses un peu plus rapides.

La partie "mise à jour" réelle s'applique $pull sur les "products" tableau pour supprimer l'un de ces éléments où le "rates" "intérieur" est un tableau vide. Ainsi, le "chemin" dans le $pull regarde en fait à l'intérieur des "products" contenu de toute façon, il est donc relatif à cela et non à l'ensemble du document.

Naturellement $pull supprimera tous les éléments qui correspondent en une seule opération. Le "multi" n'est nécessaire que lorsque vous voulez vraiment mettre à jour plus d'un document avec la déclaration