Her er en anden måde at flytte et element til en ny position, som vil ombytte positionerne for it2 og it3...
-
Fjern elementet fra arrayet ved hjælp af $pull [ Docs Here ] .
update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
-
Indsæt elementet i den nye position ved hjælp af $push. [ Docs Here ] .
update({"name": "myDoc"}, { $push: { "items" : { $each : [ "it3" ], $position : 1 } } });
Hvornår skal du bruge
Pouzors svar på at bruge $set kan være enklere og yde bedre i mange tilfælde.
Men hvis flere brugere tilføjer, fjerner og omarrangerer array-elementer samtidigt, betyder denne metode, at I ikke overskriver hinandens ændringer.
Det kan også være mere effektivt i nogle tilfælde (f.eks. store array-elementer), fordi der skrives mindre data.
GOTCHA:Liste over lister
Hvis listen, du omarrangerer, er et array af arrays, skal du bruge $all-operatoren med $pull [ Docs Here ]
Tag dette eksempel:
{
name: "myDoc",
items: [
[ "User", "dofij20r91dj93" ],
[ "User", "239vjvidjfsldf" ],
[ "User", "2309jvdsjdkk23" ]
]
}
Her er koden til at fjerne den første liste fra listen over lister:
update({"name": "myDoc"}, {
$pull: {
"items" : {
$all : [ "User", "dofij20r91dj93" ] // the sub-list to $pull
}
}
});
Liste over objekter
Det er nemt. Lad os sige, at du har følgende liste over objekter:
{
name: "myDoc",
items: [
{ type: "User", id: "dofij20r91dj93", name: "Dave" },
{ type: "Group", id: "239vjvidjfsldf", name: "Accountants" },
{ type: "User", id: "2309jvdsjdkk23", name: "Toni" }
]
}
Du kan $pull sådan her:
update({"name": "myDoc"}, {
$pull: {
"items" : { type: "User", id: "dofij20r91dj93" }
}
});