Klucz podstawowy Mongodb: przykład ustawienia pola _id za pomocą ObjectId()

⚡ Inteligentne podsumowanie

MongoDB Klucz podstawowy to pole _id, które jednoznacznie identyfikuje każdy dokument w kolekcji. Domyślnie zawiera ono automatycznie generowany identyfikator obiektu (ObjectId), ale możesz również przypisać własną wartość do pola _id podczas wstawiania dokumentu.

  • 🔑 Podstawowa rola kluczowa: Pole _id to klucz podstawowy, który jednoznacznie identyfikuje każdy dokument w MongoDB Kolekcja.
  • 🆔 Domyślny identyfikator obiektu: Jeżeli pominiesz _id, MongoDB automatycznie dodaje do dokumentu unikalną 12-bajtową wartość ObjectId.
  • ⏱️. Uporządkowane czasowo: Identyfikator obiektu zaczyna się od 4-bajtowego znacznika czasu, dzięki czemu identyfikatory można sortować według czasu utworzenia.
  • ✍️. Klucze niestandardowe: Podczas wstawiania dokumentu możesz podać własną wartość _id, na przykład liczbę lub ciąg znaków.
  • 🔒 Niezmienny: Po ustawieniu wartości _id nie można jej zmienić; aby ją zmienić, należy ją usunąć i wstawić ponownie.

Co to jest klucz podstawowy MongoDB?

In MongoDB, pole _id jako klucz podstawowy kolekcji, dzięki czemu każdy dokument może być jednoznacznie zidentyfikowany w kolekcji. Pole _id zawiera unikalną wartość ObjectID.

Domyślnie podczas wstawiania dokumentów do kolekcji, jeśli nie dodasz nazwy pola z _id w nazwie pola, to MongoDB automatycznie doda pole identyfikatora obiektu, jak pokazano poniżej

Klucz podstawowy MongoDB

Gdy wysyłasz zapytanie do dokumentów w kolekcji, możesz zobaczyć identyfikator obiektu dla każdego dokumentu w kolekcji.

Jeśli chcesz to mieć pewność MongoDB nie tworzy pola _id podczas tworzenia kolekcji i jeśli chcesz określić własny identyfikator jako _id kolekcji, musisz to wyraźnie zdefiniować podczas tworzenia kolekcji.

Tworząc jawnie pole identyfikatora, należy je utworzyć z _id w nazwie.

Spójrzmy na przykład, jak możemy to osiągnąć.

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Code Wyjaśnienie:

  1. Zakładamy, że tworzymy pierwszy dokument w kolekcji i stąd w powyższym zestawieniu podczas tworzenia kolekcji jawnie definiujemy pole _id i definiujemy dla niego wartość.

Jeśli polecenie zostanie wykonane pomyślnie i teraz użyjesz polecenia find, aby wyświetlić dokumenty w kolekcji, zostanie wyświetlony następujący wynik

Wyjście:

Klucz podstawowy MongoDB

Dane wyjściowe wyraźnie pokazują, że pole _id, które zdefiniowaliśmy podczas tworzenia kolekcji, jest teraz używane jako klucz podstawowy kolekcji.

Czym jest ObjectId w MongoDB?

ObjectId to domyślny typ wartości, który MongoDB Przypisuje kluczowi podstawowemu _id. Jest to 12-bajtowy identyfikator, który ma być globalnie unikatowy na różnych serwerach i w kolekcjach, więc dwa dokumenty prawie nigdy nie otrzymują tej samej wartości. Ponieważ sterownik klienta może wygenerować ObjectId bez pytania serwera, MongoDB umożliwia szybkie wkładanie dokumentów i obsługę wielu maszyn bez centralnego licznika.

Każdy identyfikator obiektu jest przechowywany w zwartej formie binarnej, ale wyświetlany jako 24-znakowy ciąg szesnastkowy, na przykład ObjectId(„507f1f77bcf86cd799439011”). Pierwsze bajty odnoszą się do bieżącego czasu, co oznacza, że ​​wartości rosną stopniowo w miarę tworzenia dokumentów. Dzięki temu identyfikator obiektu jest nie tylko unikalny, ale także można go sortować według kolejności dodawania, co jest przydatne, gdy chcesz, aby najnowsze lub najstarsze rekordy były wyświetlane jako pierwsze.

Struktura MongoDB Identyfikator obiektu

A MongoDB Identyfikator obiektu ma dokładnie 12 bajtów długości, a każda część ma określone znaczenie. Zrozumienie struktury pomaga wyjaśnić, dlaczego identyfikatory obiektów są unikalne i uporządkowane czasowo:

  • 4-bajtowy znacznik czasu: Liczba sekund od epoki Unix, rejestrująca moment utworzenia identyfikatora obiektu. Dzięki temu identyfikatory można sortować według czasu.
  • Losowa wartość 5-bajtowa: Wartość generowana jednokrotnie dla każdego procesu, łącząca tożsamość maszyny i procesu, dzięki czemu różni klienci generują różne identyfikatory.
  • 3-bajtowy licznik zwiększający: Licznik, który zaczyna od losowej wartości i zwiększa ją z każdym nowym ObjectId w tej samej sekundzie, zapobiegając kolizjom podczas szybkich wstawień.

Razem te trzy części gwarantują, że każdy identyfikator obiektu jest unikatowy, nawet gdy wiele dokumentów jest wstawianych jednocześnie na różnych serwerach. Możesz odczytać osadzony czas utworzenia w dowolnym momencie, wywołując metodę getTimestamp() dla identyfikatora obiektu.

Zalety używania ObjectId jako klucza podstawowego

Użycie domyślnego ObjectId jako klucza podstawowego _id oferuje kilka praktycznych korzyści, dlatego większość MongoDB kolekcje na tym polegają:

  • Automatyczne generowanie: Nie musisz samodzielnie tworzyć ani zarządzać wartościami kluczy, co zmniejsza ryzyko powstawania duplikatów kluczy.
  • Globalna unikalność: Identyfikatory obiektów pozostają unikalne na wszystkich serwerach, dzięki czemu sprawdzają się w przypadku wdrożeń rozproszonych i podzielonych.
  • Wbudowany znacznik czasu: Wbudowany czas utworzenia pozwala sortować i filtrować dokumenty według wieku bez konieczności stosowania dodatkowego pola daty.
  • Wysoka wydajność: Generowanie po stronie klienta pozwala uniknąć konieczności przesyłania danych do serwera.ping wkłada się szybko.

Chociaż ObjectId pasuje do większości aplikacji, nadal możesz wybrać niestandardowy _id, taki jak adres e-mail lub kod produktu, gdy naturalny klucz biznesowy upraszcza zapytania. Właściwy wybór zależy od sposobu, w jaki planujesz wyszukiwać i powiązywać dane.

FAQ

Nie. Pole _id jest niezmienne po utworzeniu dokumentu. Aby je zmienić, należy usunąć istniejący dokument i wstawić nowy z żądaną wartością _id.

Pole _id akceptuje większość typów BSON, w tym ObjectId, liczby całkowite, ciągi znaków, a nawet osadzone dokumenty. Jedyną zasadą jest, że wartość musi być unikatowa w obrębie kolekcji i nie może być tablicą.

Tak. MongoDB Automatycznie tworzy unikalny indeks w polu _id dla każdej kolekcji. Indeksu tego nie można usunąć, co znacznie przyspiesza wyszukiwanie według klucza podstawowego.

Sztuczna inteligencja może wyjaśnić znacznik czasu obiektu ObjectId, wygenerować kod do np.tracczas utworzenia za pomocą getTimestamp() i konwertuj identyfikatory obiektów na ciągi znaków, helping programiści mogą szybciej debugować i zrozumieć identyfikatory dokumentów.

Tak. Sztuczna inteligencja może doradzić, czy zachować domyślny ObjectId, czy użyć niestandardowego _id, takiego jak adres e-mail lub UUID, na podstawie wzorców zapytań, potrzeb w zakresie unikatowości i planów partycjonowania.

Podsumuj ten post następująco: