Här är ett annat sätt att flytta ett element till en ny position som kommer att byta positionerna för it2 och it3...
-
Ta bort elementet från arrayen med $pull [ Docs Here ] .
update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
-
Sätt in elementet i den nya positionen med $push. [ Dokument här ] .
update({"name": "myDoc"}, { $push: { "items" : { $each : [ "it3" ], $position : 1 } } });
När ska användas
Pouzors svar på att använda $set kan vara enklare och fungera bättre för många användningsfall.
Men om flera användare samtidigt lägger till, tar bort och ordnar om arrayobjekt innebär denna metod att ni inte kommer att skriva över varandras ändringar.
Det kan också vara mer effektivt i vissa fall (t.ex. stora arrayelement) eftersom mindre data skrivs.
GOTCHA:Lista över listor
Om listan du omarrangerar är en array av arrayer måste du använda operatorn $all med $pull [ Dokument här ]
Ta det här exemplet:
{
name: "myDoc",
items: [
[ "User", "dofij20r91dj93" ],
[ "User", "239vjvidjfsldf" ],
[ "User", "2309jvdsjdkk23" ]
]
}
Här är koden för att ta bort den första listan från listan med listor:
update({"name": "myDoc"}, {
$pull: {
"items" : {
$all : [ "User", "dofij20r91dj93" ] // the sub-list to $pull
}
}
});
Lista över objekt
Det här är lätt. Säg att du har följande lista med objekt:
{
name: "myDoc",
items: [
{ type: "User", id: "dofij20r91dj93", name: "Dave" },
{ type: "Group", id: "239vjvidjfsldf", name: "Accountants" },
{ type: "User", id: "2309jvdsjdkk23", name: "Toni" }
]
}
Du kan $dra så här:
update({"name": "myDoc"}, {
$pull: {
"items" : { type: "User", id: "dofij20r91dj93" }
}
});