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

Come spostare un elemento in un array MongoDB?

Ecco un altro modo per spostare un elemento in una nuova posizione che scambierà le posizioni di esso2 e it3...

  1. Rimuovere l'elemento dall'array utilizzando $pull [ Docs Here ] .

    update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
    
  2. Inserisci l'elemento nella nuova posizione usando $push. [ Documenti qui ] .

    update({"name": "myDoc"}, { 
        $push: { 
            "items" : { $each : [ "it3" ], $position : 1 }
        }
    });
    

Quando utilizzare

La risposta di Pouzor all'uso di $ set potrebbe essere più semplice e funzionare meglio per molti casi d'uso.

Tuttavia, se più utenti aggiungono, rimuovono e riordinano contemporaneamente gli elementi dell'array, questo metodo significa che non sovrascriverai le modifiche reciproche.

Potrebbe anche essere più efficiente in alcuni casi (ad es. elementi di array di grandi dimensioni) perché vengono scritti meno dati.

GOTCHA:elenco di elenchi

Se l'elenco che stai riordinando è un array di array devi usare l'operatore $all con $pull [ Documenti qui ]

Prendi questo esempio:

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

Ecco il codice per rimuovere il primo elenco dall'elenco degli elenchi:

update({"name": "myDoc"}, {
    $pull: {
        "items" : {
            $all : [ "User", "dofij20r91dj93" ]  // the sub-list to $pull
        }
    }
});

Elenco di oggetti

Questo è facile. Supponiamo di avere il seguente elenco di oggetti:

{
    name: "myDoc",
    items: [  
        { type: "User",  id: "dofij20r91dj93", name: "Dave" },   
        { type: "Group", id: "239vjvidjfsldf", name: "Accountants" }, 
        { type: "User",  id: "2309jvdsjdkk23", name: "Toni" }
    ]
}

Puoi $tirare in questo modo:

update({"name": "myDoc"}, {
    $pull: { 
        "items" : { type: "User", id: "dofij20r91dj93" } 
    }
});