sql >> Databáze >  >> NoSQL >> MongoDB

Odeberte položky pole obsahující prázdné pole

Nevím, co jste zkusili, protože to prostě není zahrnuto ve vaší otázce, ale nejlepší způsob, jak zkontrolovat prázdné pole, je v podstatě se podívat, kde je 0 index neodpovídá $exists :

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

    }
)

Část "dotaz" .update() prohlášení zajišťuje, že se i jen pokoušíme dotknout dokumentů, které mají prázdné pole v "products.rates" . To není povinné, ale vyhnete se testování následující podmínky příkazu "update" na dokumentech, kde tato podmínka není true pro jakýkoli prvek pole a tím se věci o něco zrychlují.

Skutečná část „aktualizace“ platí $pull na "products" pole k odstranění kterékoli z těch položek, kde je "vnitřní" "rates" je prázdné pole. Tedy "cesta" v rámci $pull se ve skutečnosti dívá do "products" obsahu, takže je relativní k němu a ne k celému dokumentu.

Přirozeně $pull odstraní všechny prvky, které se shodují v jediné operaci. "multi" je potřeba pouze tehdy, když opravdu chcete aktualizovat více než jeden dokument pomocí výpisu




  1. Agregační dotaz Mongodb na konkrétní záznamy namísto kolekce

  2. spring mvc rest response json a xml

  3. Jak mohu seřadit výsledky dotazů MongoDB podle velikosti vnitřního pole?

  4. Mongoid:jak se dotazovat na všechny objekty, kde je hodnota nulová?