sql >> Database >  >> NoSQL >> MongoDB

Hoe een item in een MongoDB-array te verplaatsen?

Hier is een andere manier om een ​​element naar een nieuwe positie te verplaatsen die de posities van it2 en it3 zal verwisselen...

  1. Verwijder het element uit de array met $pull [ Docs Here ] .

    update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
    
  2. 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" } 
    }
});


  1. MongoDB Bson-document serialiseren/deserialiseren met officiële C#-driver

  2. HDFS-wiscodering in Big Data Hadoop

  3. Heroku-achtergrondtaken uitvoeren met slechts 1 web-dyno en 0 worker-dyno's

  4. mangoest findById met async wait