sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo mover un elemento en una matriz MongoDB?

Aquí hay otra forma de mover un elemento a una nueva posición que intercambiará las posiciones de it2 y it3...

  1. Elimine el elemento de la matriz usando $pull [ Docs Here ] .

    update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
    
  2. Inserte el elemento en la nueva posición usando $push. [ Documentos aquí ] .

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

Cuándo usar

La respuesta de Pouzor para usar $set podría ser más simple y funcionar mejor para muchos casos de uso.

Sin embargo, si varios usuarios agregan, eliminan y reordenan simultáneamente elementos de la matriz, este método significa que no se sobrescribirán los cambios de los demás.

También podría ser más eficiente en algunos casos (por ejemplo, elementos de matriz grandes) porque se escriben menos datos.

GOTCHA:Lista de listas

Si la lista que está reordenando es una matriz de matrices, debe usar el operador $all con $pull [ Documentos aquí ]

Tome este ejemplo:

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

Aquí está el código para eliminar la primera lista de la lista de listas:

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

Lista de Objetos

Esto es facil. Digamos que tiene la siguiente lista de objetos:

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

Puedes $tirar así:

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