Czy jest możliwe wygenerowanie identycznego obiektu Mongo ObjectId dla dokumentu w dwóch różnych kolekcjach? Zdaję sobie sprawę, że jest to bardzo mało prawdopodobne, ale czy to możliwe?Możliwość generowania duplikatów Mongo ObjectId w dwóch różnych kolekcjach?
Bez zbytniej szczegółowości, proszę o to, że z aplikacją, nad którą pracuję, pokazujemy publiczne profile wybranych urzędników, którzy mamy nadzieję przekształcić w pełnoprawnych użytkowników naszej strony. Mamy osobne kolekcje dla użytkowników i wybranych urzędników, którzy nie są obecnie członkami naszej witryny. Istnieje wiele innych dokumentów zawierających różne dane o wybranych urzędnikach, które wszystkie odwzorowują z powrotem do osoby używającej wybranego oficjalnego ObjectID.
Po utworzeniu konta nadal podświetlamy dane powiązane z wybranym urzędnikiem, ale teraz są one również częścią kolekcji użytkowników z odpowiednim użytkownikiem ObjectId, aby odwzorować ich profil na interakcje z naszą aplikacją.
Rozpoczęliśmy konwersję naszej aplikacji z MySql na Mongo kilka miesięcy temu i podczas gdy jesteśmy w okresie przejściowym przechowujemy starszy identyfikator MySql dla obu tych typów danych i zaczynamy teraz przechowywać wybrane oficjalnie Mongo ObjectId w dokumencie użytkownika, aby odwzorować wybrane oficjalne dane.
Zastanawiam się właśnie nad określeniem nowego obiektu ObjectId jako poprzedniego wybranego oficjalnego obiektu ObjectId, aby uprościć sprawę, ale chciałem się upewnić, że kolizja z istniejącym ObjectIdem użytkownika nie była możliwa.
Dzięki za twój wgląd.
Edytuj: Wkrótce po opublikowaniu tego pytania zdałem sobie sprawę, że moje proponowane rozwiązanie nie było dobrym pomysłem. Lepiej będzie po prostu zachować aktualny schemat, który mamy na miejscu i po prostu połączyć się z wybranym oficjalnym "_id" w dokumencie użytkownika.
Zobacz http://www.mongodb.org/display/DOCS/Object+IDs –
Przeczytałem tę stronę wcześniej. Jak na ironię, faktycznie linkowałem do tej samej strony w poprzedniej odpowiedzi. I widziałem "rozsądnie wysokie prawdopodobieństwo bycia unikatowym", ale nie byłem pewien, czy włożenie kolekcji w to zagrało. Sądzę, że nie jestem pewien, co dokładnie reprezentuje dwubajtowa część identyfikatora procesu ObjectId. Jeśli ma to coś wspólnego z kolekcją, unikalny byłby między dwoma różnymi dokumentami tworzonymi dokładnie w tym samym czasie na tej samej maszynie w różnych kolekcjach. –
Identyfikator procesu 2-bajtowego to identyfikator procesu generującego identyfikator obiektu. Jako przykład, tutaj jest kod używany przez pymongo do generowania identyfikatorów obiektów: https://github.com/mongodb/mongo-python-driver/blob/master/bson/objectid.py#L118 – mstearn