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

Fjern matrixposter, der indeholder en tom matrix

Ved ikke, hvad du prøvede, da det simpelthen ikke er inkluderet i dit spørgsmål, men den bedste måde at tjekke for et tomt array på er at se, hvor 0 er. indekset matcher ikke $exists :

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

    }
)

"Query"-delen af ​​.update() erklæring sørger for, at vi kun forsøger at røre ved dokumenter, der har et tomt array i "products.rates" . Det er ikke påkrævet, men det undgår at teste følgende "opdaterings"-sætningsbetingelse på dokumenter, hvor denne betingelse ikke er true for ethvert array-element, og dermed gøre tingene en smule hurtigere.

Den faktiske "opdaterings"-del gælder $pull "products" array for at fjerne nogen af ​​de elementer, hvor den "indre" "rates" er et tomt array. Så "stien" i $pull ser faktisk inde i "products" indhold alligevel, så det er relativt til det og ikke til hele dokumentet.

Naturligvis $pull vil fjerne alle elementer, der matcher i en enkelt handling. "multi" er kun nødvendig, når du virkelig ønsker at opdatere mere end ét dokument med erklæringen




  1. Mongodb kan ikke finde objekt med for langt _id

  2. Kan ikke oprette forbindelse til lokal mongoDB fra java

  3. Sådan finder du tilfældige poster i mongodb

  4. Fordele og ulemper ved at bruge Selleri vs. RQ