Hier is een andere manier om een element naar een nieuwe positie te verplaatsen die de posities van it2 en it3 zal verwisselen...
-
Verwijder het element uit de array met $pull [ Docs Here ] .
update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
-
Voeg het element in de nieuwe positie in met $push. [ Docs Here ] .
update({"name": "myDoc"}, { $push: { "items" : { $each : [ "it3" ], $position : 1 } } });
Wanneer te gebruiken
Het antwoord van Pouzor om $set te gebruiken is misschien eenvoudiger en presteert in veel gevallen beter.
Als echter meerdere gebruikers tegelijkertijd array-items toevoegen, verwijderen en opnieuw ordenen, betekent deze methode dat u elkaars wijzigingen niet overschrijft.
Het kan in sommige gevallen ook efficiënter zijn (bijvoorbeeld grote array-elementen) omdat er minder gegevens worden geschreven.
GOTCHA:lijst met lijsten
Als de lijst die u opnieuw ordent een array van arrays is, moet u de operator $all gebruiken met $pull [ Docs Here ]
Neem dit voorbeeld:
{
name: "myDoc",
items: [
[ "User", "dofij20r91dj93" ],
[ "User", "239vjvidjfsldf" ],
[ "User", "2309jvdsjdkk23" ]
]
}
Hier is de code om de eerste lijst uit de lijst met lijsten te verwijderen:
update({"name": "myDoc"}, {
$pull: {
"items" : {
$all : [ "User", "dofij20r91dj93" ] // the sub-list to $pull
}
}
});
Lijst met objecten
Dit is makkelijk. Stel dat u de volgende lijst met objecten heeft:
{
name: "myDoc",
items: [
{ type: "User", id: "dofij20r91dj93", name: "Dave" },
{ type: "Group", id: "239vjvidjfsldf", name: "Accountants" },
{ type: "User", id: "2309jvdsjdkk23", name: "Toni" }
]
}
Je kunt als volgt $ trekken:
update({"name": "myDoc"}, {
$pull: {
"items" : { type: "User", id: "dofij20r91dj93" }
}
});