Na tej stronie opisujemy różnice w działaniu między Cloud Firestore a MongoDB.
Aby dowiedzieć się więcej o obsługiwanych funkcjach w zależności od wersji MongoDB, zapoznaj się z tymi artykułami:
Połączenia i bazy danych
- Każde połączenie jest ograniczone do 1 bazy danychCloud Firestore.
- Przed połączeniem z bazą danych musisz ją utworzyć.
Nazwa
W przypadku nazywania części modelu danych obowiązują te różnice:
Kolekcje
- Nazwy kolekcji pasujące do wzorca
__.*__nie są obsługiwane.
Pola
- Nazwy pól pasujące do
__.*__nie są obsługiwane. - Puste nazwy pól nie są obsługiwane.
Dokumenty
- Maksymalny rozmiar dokumentu to 16 MiB.
- Maksymalna głębokość zagnieżdżenia pól to 20. Każde pole typu Array i Object zwiększa ogólną głębokość o 1 poziom.
- W przypadku zdarzeń Eventarc dokumenty większe niż 10 MiB nie są uwzględniane w ładunku zdarzenia.
_id pole
- Pole
_idnajwyższego poziomu musi być typu ObjectId, String, 64-bit integer, 32-bit integer, Double, Binary lub Object. Inne typy BSON nie są obsługiwane.
Wartości
- Typy BSON JavaScript, Symbol, DBPointer i Undefined nie są obsługiwane.
Data
- Wartości daty muszą mieścić się w zakresie
[0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z].
Decimal128
- Wartości
NaN, nieskończoność dodatnia i nieskończoność ujemna są kanonizowane podczas zapisu. - Operacje arytmetyczne na typie Decimal128 nie są obsługiwane.
Liczba zmiennoprzecinkowa
- Wartości
NaNsą kanonizowane podczas zapisu.
Wyrażenie regularne
- Opcje wyrażenia regularnego muszą być prawidłowe („i”, „m”, „s”, „u” lub „x”) i podane w kolejności alfabetycznej bez powtórzeń.
Zapytania
- Naturalna kolejność sortowania (zapytania bez jawnego sortowania) nie pasuje do kolejności wstawiania ani do kolejności sortowania według pola
_idw kolejności rosnącej.
Agregacje
- Agregacje mogą mieć maksymalnie 250 etapów.
- Etapy
$mergei$outnie są obsługiwane. Pełną listę obsługiwanych etapów i operatorów znajdziesz w sekcji polecenia. - Etap
$facetnie obsługuje$randani$samplena etapach wejściowych, ponieważ jest to wyrażenie niestabilne.
Zapisy
- Dokumentów, których nazwy zaczynają się od znaku dolara („$”), nie można tworzyć za pomocą funkcji wstawiania lub aktualizowania w
updateanifindAndModify. - Upewnij się, że ciąg połączenia zawiera
retryWrites=false(lub użyj metody odpowiedniej dla sterownika), aby sterownik nie próbował używać tej funkcji. Nie są obsługiwane zapisy, które można ponowić.
Transakcje
Obsługiwane są izolacja zrzutu i transakcje serializowalne.
Domyślnie transakcje używają optymistycznej kontroli równoczesności z izolacją zrzutu.
Odczytywanie problemu
Cloud Firestore obsługuje
snapshot,majorityilinearizableodczyty. Domyślnie jest tosnapshot, co odnosi się do izolacji zrzutu.Używaj
linearizable, gdy aplikacja wymaga ścisłej spójności i musi zapobiegać anomaliom związanym z niezgodnością zapisu. W przypadku innych obciążeńsnapshotmoże zwiększyć wydajność i zmniejszyć rywalizację o transakcje.
Zapisuj dane o obawach
- Obsługiwane są tylko poziomy zapisu
w: 'majority'iw: 1.
Ustawienia czytania
- Obsługiwane są tylko poziomy odczytu
primary,primaryPreferred,primary_preferred,secondary_preferredinearest.
Indeksy
- Indeksy wieloznaczne nie są obsługiwane.
- Cloud Firestore nie tworzy automatycznie indeksu w
_id, ale zapewnia, że wartości_idsą unikalne w kolekcji. Aby uzyskać podobne działanie sortowania, musisz jawnie utworzyć uporządkowany indeks w polu_id. Pamiętaj jednak o potencjalnych problemach z hotspotami, zwłaszcza jeśli wartości_idrosną lub maleją monotonicznie (np. sygnatury czasowe), ponieważ może to mieć wpływ na wydajność na dużą skalę. - Indeksy bez włączonej obsługi wielu kluczy nie są automatycznie zmieniane na indeksy z obsługą wielu kluczy na podstawie operacji zapisu. Musisz włączyć opcję wielu kluczy podczas tworzenia indeksu. Nie można jej zmienić.
Błędy
- Kody błędów i komunikaty o błędach mogą się różnić w zależności od Cloud Firestore i MongoDB.
Polecenia
W przypadku niektórych poleceń występują te różnice w działaniu.
- Polecenia, których nie ma w tabelach poniżej, nie są obsługiwane.
- Symbol
commentjest akceptowany przez większość poleceń, ale jest ignorowany. maxTimeMSjest akceptowane przez większość poleceń, ale może być ignorowane.
Zapytania
i pisze
| Command | Nieobsługiwane pola |
|---|---|
|
|
|
|
|
|
|
|
(brak) |
|
|
W instrukcji aktualizacji:
|
|
|
W instrukcji usuwania:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(brak) |
|
|
(brak) |
Transakcje
i sesje.
| Command | Nieobsługiwane pola |
|---|---|
|
|
(brak) |
|
|
(brak) |
|
|
(brak) |
Administracja
| Command | Nieobsługiwane pola | Notes |
|---|---|---|
|
|
|
Jeśli podano wartość, pole filter musi być puste. |
|
|
(brak) |
Jeśli podano wartość, parametr authorizedCollections musi mieć wartość false. |
|
|
(brak) |
|
|
|
(brak) |
|
|
|
(brak) |
|
|
|
|
To polecenie nie wykonuje żadnej operacji. Jeśli podano wartość, parametr capped musi mieć wartość false.
|
|
|
(brak) |
Ograniczenia usuwania kolekcji
Gdy usuniesz kolekcję, obowiązują te ograniczenia:
- Ponowne tworzenie indeksu: nie możesz utworzyć tej samej konfiguracji indeksu bezpośrednio po usunięciu. Musisz poczekać na zakończenie usuwania w tle.
- Limit rozmiaru: usuwanie dużych kolekcji może spowodować przekroczenie limitu czasu połączenia. Jeśli widzisz przekroczenia limitu czasu, wydłuż termin połączenia. Możesz też użyć zbiorczego usuwania.
- Zdarzenia: w przypadku korzystania z polecenia
dropnie są generowane zdarzenia związane z kolekcją Drop dla Eventarc.
Co dalej?
- Wykonaj czynności opisane w artykule Krótkie wprowadzenie: tworzenie bazy danych i łączenie się z nią.
- Pełną listę obsługiwanych funkcji znajdziesz w artykule Obsługiwane typy danych, sterowniki i funkcje MongoDB.