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

Como mover um item em um array MongoDB?


Aqui está outra maneira de mover um elemento para uma nova posição que trocará as posições de it2 e it3...

  1. Remova o elemento da matriz usando $pull [ Docs Here ] .
    update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
    

  2. Insira o elemento na nova posição usando $push. [Docs Here] .
    update({"name": "myDoc"}, { 
        $push: { 
            "items" : { $each : [ "it3" ], $position : 1 }
        }
    });
    

Quando usar

A resposta de Pouzor para usar $set pode ser mais simples e ter melhor desempenho para muitos casos de uso.

No entanto, se vários usuários estiverem adicionando, removendo e reordenando itens de matriz simultaneamente, esse método significa que você não substituirá as alterações um do outro.

Também pode ser mais eficiente em alguns casos (por exemplo, grandes elementos de matriz) porque menos dados estão sendo gravados.

GOTCHA:Lista de listas

Se a lista que você está reordenando for um array de arrays, você precisa usar o operador $all com $pull [Documentos aqui]

Tome este exemplo:
{
    name: "myDoc",
    items: [  
        [ "User", "dofij20r91dj93" ],   
        [ "User", "239vjvidjfsldf" ], 
        [ "User", "2309jvdsjdkk23" ]
    ]
}

Aqui está o código para remover a primeira lista da lista de listas:
update({"name": "myDoc"}, {
    $pull: {
        "items" : {
            $all : [ "User", "dofij20r91dj93" ]  // the sub-list to $pull
        }
    }
});

Lista de objetos

Isso é facil. Digamos que você tenha a seguinte lista de objetos:
{
    name: "myDoc",
    items: [  
        { type: "User",  id: "dofij20r91dj93", name: "Dave" },   
        { type: "Group", id: "239vjvidjfsldf", name: "Accountants" }, 
        { type: "User",  id: "2309jvdsjdkk23", name: "Toni" }
    ]
}

Você pode $ puxar assim:
update({"name": "myDoc"}, {
    $pull: { 
        "items" : { type: "User", id: "dofij20r91dj93" } 
    }
});