MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Offenlegung von MongoDB ObjectIds

Kurzversion :ja, String überall verwenden.

Wenn Sie mit Anmerkungen einverstanden sind, verwenden Sie :

[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

Andernfalls können Sie eine Klassenzuordnung verwenden:

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

Langfassung :

Es ist ratsam, so viel wie möglich (wenn möglich) in Ihrem Modell und Ihrer Dienstschicht etwas Undurchsichtiges zu verwenden, das nicht direkt mit der zugrunde liegenden Datenbankimplementierung verbunden ist.

Früher waren Primärschlüssel-IDs normalerweise große Zahlen, die dann einer Nummern-Primärschlüsselspalte in der Datenbank zugeordnet wurden. Beim Zuweisen einer neuen ID zu einer neuen Entität musste jedoch eine Überprüfung der Datenbank durchgeführt werden, um sicherzustellen, dass eine eindeutige ID vorhanden ist. Es gibt viele Techniken, von LO-HI-ID-Generatoren über auto_increment-Spalten bis hin zu Sequenzen usw.

Mit NoSQL und dem Bedarf an mehr Parallelität verwenden die meisten Anwendungen jetzt UUIDs oder Variationen davon, da die ID mit angemessener Wahrscheinlichkeit eindeutig sein kann, ohne dass die Datenbank gefragt werden muss, ob sie wirklich eindeutig ist, oder Sequenzen verwenden oder Ähnliches, das sind Engpässe in einer Anwendung, die horizontal skalieren.

MongoDB ist kein Unterschied und verwendet ObjectId, die eine Art UUIDs sind.

Diese IDs (sowohl Mongo als auch andere) können immer als Strings dargestellt werden, normalerweise eine HEX-Darstellung der Bytes, aus denen der Schlüssel besteht. Verwenden Sie also in Ihrem Modell String als IDs, in Ihrer Serviceschicht dasselbe, in Ihrer Datenschicht konvertieren Sie es in das Format, das für Ihre zugrunde liegende Datenbankimplementierung besser ist, MongoDB in diesem Fall.