Używam wersji 2.06 Mongodb i wersji (1.5) sterownika C# dostarczonego przez 10Gen.Z mongodb i guids dla Id dokumentów, co jest skutecznym sposobem przechowywania Guids, aby łatwo odzyskać faktyczne Guid?
Każdy z moich jednostek ma konfigurację właściwości ID jako takie ...
[BsonId(IdGenerator = typeof(GuidGenerator))]
public Guid Id { get; set; }
pole id jest przechowywana jako Binary - 3: UuidLegacy. Ze względu na to, jak jest przechowywany, gdy wywołuję ToJson() na obiekcie, zwraca następujący obiekt javascript dla identyfikatora.
_id : Object
$binary: "some values here"
$type: "03"
Dzieje się tak oczywiście dlatego, że dane są zapisywane jako Binary = 3: UuidLegacy. To ma sens.
Chcę użyć rzeczywistego Guida w moim kodzie JavaScript. Jak wydajne byłoby MongoDB, gdyby moje właściwości Id wyglądały następująco?
[BsonId(IdGenerator = typeof(GuidGenerator)),MongoDB.Bson.Serialization.Attributes.BsonRepresentation(BsonType.String)]
public Guid Id { get; set; }
To sprawia, że mongodb przechowuje mój Id jako ciąg. Ale jak skuteczny jest to naprawdę? Zgaduję, że format binarny dla mojego Id jest lepszy, ale naprawdę potrzebuję Guida.
Jak mogę przejść z Binary - 3: uuidLegacy do Guida, którego potrzebuję w moim jsonie?
Przypuszczam, że inna myśl mogłaby bym po prostu użyć wartości binarnej $, która została mi wysłana? Używam identyfikatora do wykonywania wyszukiwań i takich, jak część moich ciągów zapytań.
Dzięki,
Witaj Robert! Dziękuję za odpowiedź, bardzo doceniona. Podwojenie wymagań dotyczących przestrzeni jest dla mnie problemem. – RDotLee
Inną wadą, jaką słyszałem z przechowywaniem identyfikatorów GUID jako ciągów, jest to, że nie można używać struktury agregacji mongodb. –
"Podwajanie" jest przerażającym słowem, ale dotyczy tylko pola GUID, które ma tylko 17 (?) Bajtów w BSON. Łańcuch zajmie 36 bajtów, co * jest * w przybliżeniu podwójne, ale wciąż tylko dodatkowe 19 bajtów na GUID. Jeśli 19 dodatkowych bajtów na GUID jest problemem dla ciebie, BSON prawdopodobnie nie jest formatem dla ciebie. – meustrus