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

MongoDB ObjectIds eksponering

Kort version:ja, brug String overalt.

Hvis du er ok med annoteringer, så brug :

[BsonId][BsonRepresentation(BsonType.ObjectId)]offentlig streng Id { get; sæt; }

Ellers kan du bruge et klassekort :

BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.SetIdMember(cm.GetMemberMap(x => x.Id) .SetIdGenerator(StringObjectIdGenerator.Instance)); });  

Lang version :

Det er tilrådeligt at bruge noget uigennemsigtigt, som ikke er direkte forbundet med den underliggende databaseimplementering, i din model og servicelag så meget som muligt (når det er muligt).

Tidligere var primærnøgle-id'er sædvanligvis store tal, som derefter blev tilknyttet en tal primærnøglekolonne i databasen. Men når man tildelte et nyt id til en ny enhed, skulle der foretages en kontrol af databasen for at sikre, at man havde et unikt id. Der findes mange teknikker, lige fra LO-HI id-generatorer, til auto_increment-kolonner, til sekvenser osv..

Med NoSQL, og behovet for mere parallelitet, bruger de fleste applikationer nu UUID'er eller variationer af det, fordi ID'et kan genereres med rimelige sandsynligheder, vil det være unikt uden at skulle spørge databasen, om det virkelig er unikt, eller bruge sekvenser eller lignende, der er flaskehalse i en applikation, der skaleres vandret.

MongoDB er ingen forskel, og bruger ObjectId, der er en slags UUID'er.

Disse id'er (både mongo og andre) kan altid repræsenteres som strenge, normalt en HEX-repræsentation af de bytes, der udgør nøglen. Så i din model skal du bruge String som id'er, i dit servicelag det samme, i dit datalag konverter det til det format, der er bedre for din underliggende databaseimplementering, MongoDB i dette tilfælde.



  1. MongoDB BSON-codec bruges ikke under kodning af objekt

  2. Spring RedisTemplate :Serialiser flere modelklasser til JSON. Skal du bruge flere RedisTemplates?

  3. MongoDB - mongofiler

  4. loopback inkluderer fjernmetoden i forespørgslen