MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie verschiebt man ein Element in einem MongoDB-Array?

Hier ist eine weitere Möglichkeit, ein Element an eine neue Position zu verschieben, wodurch die Positionen von it2 und it3 vertauscht werden ...

  1. Entfernen Sie das Element aus dem Array mit $pull [ Docs Here ] .

    update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
    
  2. Fügen Sie das Element mit $push an der neuen Position ein. [ Docs Here ] .

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

Wann zu verwenden

Pouzors Antwort auf die Verwendung von $set könnte einfacher sein und für viele Anwendungsfälle eine bessere Leistung erbringen.

Wenn jedoch mehrere Benutzer gleichzeitig Array-Elemente hinzufügen, entfernen und neu anordnen, bedeutet diese Methode, dass Sie die Änderungen des anderen nicht überschreiben.

In einigen Fällen (z. B. bei großen Array-Elementen) kann es auch effizienter sein, da weniger Daten geschrieben werden.

GOTCHA:Liste der Listen

Wenn die Liste, die Sie neu anordnen, ein Array von Arrays ist, müssen Sie den $all-Operator mit $pull [ Docs Here ]

Nehmen Sie dieses Beispiel:

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

Hier ist der Code, um die erste Liste aus der Liste der Listen zu entfernen:

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

Liste der Objekte

Das ist einfach. Angenommen, Sie haben die folgende Liste von Objekten:

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

Sie können folgendermaßen $ziehen:

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