Na tej stronie opisujemy różnice w działaniu Cloud Firestore i MongoDB.
Szczegółowe informacje o obsługiwanych funkcjach w zależności od wersji MongoDB znajdziesz w tych artykułach:
Połączenia i bazy danych
- Każde połączenie jest ograniczone do 1 Cloud Firestore bazy danych.
- 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 wzorca
__.*__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 dodaje jeden poziom do ogólnej głębokości.
- W przypadku zdarzeń Eventarc dokumenty większe niż 10 MiB nie są uwzględniane w ładunku zdarzenia.
_id pole
- Pole najwyższego poziomu
_idmusi być typu ObjectId, String, 64-bitowa liczba całkowita, 32-bitowa liczba całkowita, 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 kolumny
_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 etapów wejściowych$randani$sample, 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 znaków połączenia zawiera
retryWrites=false(lub użyj metody odpowiedniej dla sterownika), aby sterownik nie próbował używać tej funkcji. Ponawialne zapisy nie są obsługiwane.
Transakcje
Obsługiwane są izolacja zrzutu i transakcje z możliwością serializacji.
Domyślnie transakcje korzystają z optymistycznej kontroli równoczesności z izolacją zrzutu.
Odczytywanie problemu
Cloud Firestore obsługuje poziomy odczytu
snapshot,majorityilinearizable. Wartość domyślna tosnapshot, co oznacza izolację zrzutów.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 odczytu
- Obsługiwane są tylko obawy dotyczące 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 zachowanie sortowania, musisz jawnie utworzyć indeks uporządkowany w polu_id. Pamiętaj jednak o potencjalnych problemach z punktami krytycznymi, zwłaszcza jeśli wartości_idrosną lub maleją monotonicznie (np. sygnatury czasowe), ponieważ może to wpływać na wydajność na dużą skalę. - Indeksy bez włączonej funkcji wielu kluczy nie są automatycznie zmieniane na indeksy wielu kluczy na podstawie operacji zapisu. Obsługę wielu kluczy musisz włączyć podczas tworzenia indeksu. Nie można zmienić tej opcji.
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.
commentjest akceptowany przez większość poleceń, ale jest ignorowany.maxTimeMSjest akceptowane przez większość poleceń, ale może być ignorowane.
Zapytania
i zapisuje
| 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ść, musi ona być fałszywa. capped
|
|
|
(brak) |
Ograniczenia dotyczące 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 indeksu. 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 Eventarc nie są generowane zdarzenia związane z usuwaniem kolekcji, gdy używasz polecenia
drop.
Co dalej?
- Wykonaj czynności opisane w krótkim wprowadzeniu do tworzenia bazy danych i łączenia się z nią.
- Pełną listę obsługiwanych funkcji znajdziesz w artykule Obsługiwane typy danych, sterowniki i funkcje MongoDB.