sql >> Database >  >> NoSQL >> MongoDB

Verwijder array-items die een lege array bevatten

Ik weet niet wat je hebt geprobeerd, want het is gewoon niet opgenomen in je vraag, maar de beste manier om te controleren op een lege array is om in feite te kijken waar de 0 index komt niet overeen met $exists :

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

    }
)

Het "query"-gedeelte van de .update() statement zorgt ervoor dat we alleen proberen documenten aan te raken die een lege array hebben in "products.rates" . Dat is niet vereist, maar het vermijdt het testen van de volgende "update"-instructievoorwaarde op documenten waar die voorwaarde niet true is voor elk array-element, en maakt het dus een beetje sneller.

Het eigenlijke "update"-gedeelte is van toepassing $pull op de "products" array om elk van die items te verwijderen waar de "innerlijke" "rates" is een lege array. Dus het "pad" binnen de $pull kijkt eigenlijk in de "products" inhoud toch, dus het is relatief aan dat en niet aan het hele document.

Natuurlijk $pull verwijdert alle elementen die overeenkomen in een enkele bewerking. De "multi" is alleen nodig als u echt meer dan één document wilt bijwerken met de verklaring




  1. MongoDB + Elasticsearch of alleen Elasticsearch?

  2. Kunt u machtigingen op collectieniveau hebben in MongoDB?

  3. MongoDB:onvoldoende geheugen

  4. mongodb - batchquery uitvoeren