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

mongodb sorteringsrækkefølge på _id

For at uddybe, hvad Andre sagde:

Da ObjectID-tidsstemplet kun er til det andet, kunne to (eller flere) ObjectID'er nemt oprettes med samme værdi for tidsstemplet (de første 4 bytes). Hvis disse blev oprettet på den samme maskine (maskine-ID - de næste 3 bytes), ved den samme proces (PID - de næste 2 bytes), så ville den eneste ting at skelne mellem dem være "inc"-feltet, de sidste 3 bytes til sidst.

Opdatering:januar 2020

Dette svar er fortsat populært, så det er værd at opdatere lidt. ObjectID-specifikationen har udviklet sig siden dette svar blev skrevet for 8 år siden, og de 5 bytes efter tidsstemplet er nu simpelthen tilfældige, hvilket i høj grad vil mindske sandsynligheden for eventuelle kollisioner. De sidste tre bytes er stadig inkrementelle, men initialiseret ved en tilfældig værdi for at starte, hvilket igen gør kollisioner mindre sandsynlige. Objekt-ID'et indeholder nu mindre kontekst (du kan ikke nemt se, hvor det blev genereret og ved hvilken proces), men jeg vil gætte på, at informationen ikke blev brugt på nogen meningsfuld måde og er blevet forældet til fordel for bedre randomisering af ID'et.

Afslut opdatering

Se her for den fulde spec:

https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification

Dette "inc"-felt er enten et stadigt stigende felt (så kan du med rimelighed forvente, at sorteringen er i indsæt-/opret-rækkefølgen) eller en tilfældig værdi (derefter sandsynligvis unik, men ikke ordnet), forudsat at specifikationen selvfølgelig er implementeret korrekt . Bemærk, at ObjectID'erne kan genereres af driveren eller applikationen (eller endog manuelt) snarere end af MongoDB selv, så medmindre du har fuld kontrol over, hvordan de genereres, så kan et eller andet af ovenstående være gældende.



  1. Heroku Custom Domain fungerer ikke

  2. Befolk indlejret array i mongoose

  3. Håndtering af brugerdefineret BSON Marshaling

  4. grupper efter datoer i mongodb