sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur sorterar en array i en samling

Förutsatt att varorna i dina products array är unika, det finns inget enkelt stöd på serversidan för att underhålla denna array i sorterad ordning som i MongoDB 2.4. Ditt bästa alternativ med tanke på de kapslade arrayerna är att sortera arrayerna i din applikationslogik efter behov (dvs. vid infogning/uppdatering eller vid hämtning/visning).

Datamodelleringsöverväganden

Om du behöver göra mycket manipulation av kapslade arrayposter, bör du överväga att förenkla din datamodell för att göra den lättare att arbeta med. Ditt designmål med MongoDB bör vara att ha en datamodell som är lämplig för dina tillämpningsfall med acceptabel prestandabalans mellan enkel infogning/uppdatering/fråga. Du behöver definitivt inte modellera allt i en enda samling/fråga om det inte är vettigt att göra det, och du bör vara beredd att denormalisera (duplicera) data. För många-till-många-relationer som produktkategorier <=> är det typiskt att bädda in och avnormalisera vilken enhet som uppdateras mindre ofta (till exempel bädda in kategorier i produkter).

Bestående sorterade, begränsade arrayer (icke-unika objekt)

Om du vill bevara arrayer i sorterad ordning och objekten är inte unika, MongoDB 2.4 har möjlighet att $push till en sorterad array men detta måste användas tillsammans med en skiva (array limit). Om du $push identiska poster till en sorterad array kommer du att sluta med dubbletter (så det här är troligen inte vad du är ute efter).

Exempeluppdatering, förutsatt page i ditt exempel var samlingens namn:

db.page.update(
    // Query
    { "_id": "56rgt46rt54h68rt4h6" },

    // Update sorted array
    // NB: referring by array index position 0, as there isn't a named reference
    { $push : {
        "categories.0.products" : { 

            // List of new elements to push
            $each : [
                { "name" : "E", "pos": 3 }
            ],

            // Sort by pos (ascending)
            $sort : { "pos" : 1 },

            // Maximum number of array elements (required for $sort)
            $slice : -100
        }
    }}
)



  1. Hur tar jag bort allt i Redis?

  2. Välj stränglängd i mongodb

  3. hur ansluter man mongoDB till servern?

  4. Uppdatering om Aggregate i Mongodb