sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan sorteres et array i en samling

Forudsat varerne i dine products array er unikke, der er ikke nogen nem server-side support til at vedligeholde dette array i sorteret rækkefølge som ved MongoDB 2.4. Din bedste mulighed givet de indlejrede arrays vil være at sortere arrays i din applikationslogik efter behov (dvs. ved indsættelse/opdatering eller ved hentning/visning).

Overvejelser om datamodellering

Hvis du har brug for en masse manipulation af indlejrede array-indgange, bør du overveje at udjævne din datamodel for at gøre det nemmere at arbejde med. Dit designmål med MongoDB bør være at have en datamodel, der er passende til dine applikationsbrugstilfælde med acceptabel ydeevnebalance mellem nem indsættelse/opdatering/forespørgsel. Du behøver bestemt ikke at modellere alt i en enkelt samling/forespørgsel, hvis det ikke giver mening at gøre det, og du bør være forberedt på at denormalisere (duplikere) data. For mange-til-mange-forhold, såsom produktkategorier <=>, er det typisk at indlejre og denormalisere den enhed, der sjældnere opdateres (f.eks. indlejring af kategorier i produkter).

Vedholdende sorterede, begrænsede arrays (ikke-unikke varer)

Hvis du ønsker at fortsætte arrays i sorteret rækkefølge og elementerne er ikke unikke, MongoDB 2.4 har mulighed for at $push til et sorteret array, men dette skal bruges sammen med et udsnit (matrixgrænse). Hvis du $push identiske indgange til et sorteret array vil du ende med dubletter (så det er sandsynligvis ikke det, du leder efter).

Eksempelopdatering, forudsat page i dit eksempel var samlingens navn:

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. Mongo åbner for mange forbindelser

  2. hvordan tæller man et $opslagsfelt i mongo db?

  3. Kommando fejler i script, virker i kommandolinje

  4. Vælg data, hvor intervallet mellem to forskellige felter indeholder et givet tal