sql >> Database >  >> NoSQL >> MongoDB

mongodb sorteervolgorde op _id

Om iets uit te breiden op wat Andre zei:

Aangezien de ObjectID-tijdstempel slechts tot de tweede is, kunnen gemakkelijk twee (of meer) ObjectID's worden gemaakt met dezelfde waarde voor de tijdstempel (de eerste 4 bytes). Als deze op dezelfde machine zijn gemaakt (machine-ID - de volgende 3 bytes), door hetzelfde proces (PID - de volgende 2 bytes), dan zou het enige dat ze onderscheiden het veld "inc" zijn, de laatste 3 bytes aan het einde.

Update:januari 2020

Dit antwoord blijft populair, dus het is de moeite waard om een ​​beetje bij te werken. De ObjectID-specificatie is geëvolueerd sinds dit antwoord 8 jaar geleden werd geschreven en de 5 bytes na de tijdstempel zijn nu gewoon willekeurig, wat de kans op eventuele botsingen aanzienlijk zal verminderen. De laatste drie bytes zijn nog steeds incrementeel, maar worden geïnitialiseerd op een willekeurige waarde om te beginnen, waardoor botsingen minder waarschijnlijk worden. De ObjectID bevat nu minder context (je kunt niet gemakkelijk zien waar deze is gegenereerd en door welk proces), maar ik vermoed dat de informatie niet op een zinvolle manier werd gebruikt en is verouderd ten gunste van een betere randomisatie van de ID.

Update beëindigen

Zie hier voor de volledige specificaties:

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

Dat "inc" -veld is ofwel een steeds groter wordend veld (dan kun je redelijkerwijs verwachten dat de sortering in de volgorde van invoegen / maken is) of een willekeurige waarde (dan waarschijnlijk uniek, maar niet geordend), ervan uitgaande dat de specificatie natuurlijk correct is geïmplementeerd . Houd er rekening mee dat de ObjectID's kunnen worden gegenereerd door het stuurprogramma of de toepassing (of zelfs handmatig) in plaats van door MongoDB zelf, dus tenzij u volledige controle hebt over hoe ze worden gegenereerd, kan een of al het bovenstaande van toepassing zijn.



  1. document retourneren met het laatste subdocument alleen in mongodb-aggregaat

  2. NoSQL (MongoDB) vs Lucene (of Solr) als uw database

  3. vraag terug op basis van datum

  4. Geheugenefficiënte manier om 32-bits geheel getal met teken op te slaan in Redis