MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Remover entradas de matriz que contêm uma matriz vazia


Não sei o que você tentou, pois simplesmente não está incluído na sua pergunta, mas a melhor maneira de verificar se há uma matriz vazia é basicamente procurar onde o 0 o índice não corresponde a $exists :
Inventory.update(
    { "products.rates.0": { "$exists": false } },
    { 
        "$pull": {
            "products": { "rates.0": { "$exists": false } }
        }
    },
    { "multi": true },
    function(err,numAffected) {

    }
)

A parte "query" do .update() é garantir que apenas tentemos tocar em documentos que tenham uma matriz vazia em "products.rates" . Isso não é necessário, mas evita testar a seguinte condição de instrução "update" em documentos em que essa condição não é true para qualquer elemento da matriz e, portanto, torna as coisas um pouco mais rápidas.

A parte "atualização" real se aplica a $pull nos "products" array para remover qualquer um desses itens onde o "interno" "rates" é uma matriz vazia. Portanto, o "caminho" dentro do $pull está realmente olhando dentro de "products" conteúdo de qualquer maneira, então é relativo a isso e não a todo o documento.

Naturalmente $pull removerá todos os elementos correspondentes em uma única operação. O "multi" só é necessário quando você realmente deseja atualizar mais de um documento com a instrução