Hier ist eine andere Art und Weise ein Element an eine neue Position zu bewegen, die die Positionen von IT2 und IT3 tauschen wird ...
Entfernen Sie das Element aus dem Array mit $ pull [ Docs Here ].
update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
Das Element an der neuen Position mit $ push einfügen. [ Docs Here ].
update({"name": "myDoc"}, {
$push: {
"items" : { $each : [ "it3" ], $position : 1 }
}
});
Wenn
Pouzor Antwort auf Verwenden $ Satz verwenden könnte einfacher sein und eine bessere Leistung für viele Anwendungsfälle.
Wenn jedoch mehrere Benutzer gleichzeitig Arrayelemente hinzufügen, entfernen und neu anordnen, bedeutet dies, dass Sie die Änderungen des anderen nicht überschreiben.
In einigen Fällen (z. B. große Array-Elemente) könnte es auch effizienter sein, weil weniger Daten geschrieben werden.
GOTCHA: Liste der Listen
Wenn die Liste Sie ein Array von Arrays Sie die $ alle Betreiber mit $ [ Docs Here ]
dieses Beispiel nehmen ziehen verwenden müssen, sind Nachbestellung ist:
{
name: "myDoc",
items: [
[ "User", "dofij20r91dj93" ],
[ "User", "239vjvidjfsldf" ],
[ "User", "2309jvdsjdkk23" ]
]
}
Hier ist der Code zum Entfernen der ersten Liste aus der Liste der Listen:
update({"name": "myDoc"}, {
$pull: {
"items" : {
$all : [ "User", "dofij20r91dj93" ] // the sub-list to $pull
}
}
});
Liste der Objekte
Das ist einfach. Sagen Sie bitte 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 wie folgt ziehen $:
update({"name": "myDoc"}, {
$pull: {
"items" : { type: "User", id: "dofij20r91dj93" }
}
});
Nein, es ist kein Weg, dass in einem einzigen Schritt zu tun. http: //docs.mongodb.org/manual/Referenz/Operator/# Operatoren. Tatsächlich gibt es nicht einmal eine Möglichkeit, ein Element in einen bestimmten Index einzufügen. Es ist ein ungelöstes/offenes Problem: https://jira.mongodb.org/browse/SERVER-2363. Sie müssen die gesamte Array-Liste neu schreiben. – WiredPrairie
Was denken Sie, ist die beste Praxis dafür? –
UPDATE: ab Version 2.6.in einen bestimmten Index einfügen mit $ Position - https://docs.mongodb.org/manual/reference/operator/update/position/ –