Na tej stronie opisano różnice w działaniu między Cloud Firestore i MongoDB.
Zestawienie obsługiwanych funkcji w zależności od wersji MongoDB znajdziesz w tych artykułach:
Połączenia i bazy danych
- Każde połączenie jest ograniczone do jednej bazy danych Cloud Firestore.
- Przed połączeniem się z bazą danych należy ją utworzyć.
Nazwa
W przypadku nazewnictwa części modelu danych obowiązują te różnice.
Kolekcje
- Nazwy kolekcji pasujące do
__.*__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 tablica i obiekt dodaje 1 poziom do ogólnej głębokości.
- W zdarzeniach Eventarc dokumenty o rozmiarze większym niż 10 MiB nie są uwzględniane w ładunku zdarzenia.
_id pole
- Pole najwyższego poziomu
_idmusi 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, dodatnia nieskończoność i ujemna nieskończoność są kanonizowane podczas zapisu. - Operacje arytmetyczne na 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 porządku alfabetycznym bez powtórzeń.
Zapytania
- Naturalna kolejność sortowania (zapytania bez wyraźnego sortowania) nie pasuje do kolejności wstawiania ani kolejności według
_idrosnąco.
Agregacje
- Agregacje są ograniczone do 250 etapów.
- Etapy
$mergei$outnie są obsługiwane. Pełną listę obsługiwanych etapów i operatorów znajdziesz w sekcji poleceń. - Etap
$facetnie obsługuje$randani$samplena etapach wejściowych, ponieważ jest to wyrażenie nietrwałe.
Zapisy
- Dokumentów o nazwach zaczynających się od znaku dolara („$”) nie można tworzyć za pomocą funkcji upsert w
updateanifindAndModify. - Upewnij się, że ciąg znaków połączenia zawiera
retryWrites=false(lub użyj metody odpowiedniej dla Twojego sterownika), aby sterownik nie próbował używać tej funkcji. Zapisy z możliwością ponowienia nie są obsługiwane.
Transakcje
Obsługiwane są izolacja zrzutu i transakcje z możliwością serializacji.
Domyślnie transakcje używają optymistycznej kontroli równoczesności z izolacją zrzutu.
Odczytywanie zgłoszenia
Cloud Firestore obsługuje ustawienia odczytu
snapshot,majorityilinearizable. Wartość domyślna tosnapshot, co oznacza izolację zrzutu.Używaj
linearizable, gdy aplikacja wymaga ścisłej spójności i musi zapobiegać anomaliom związanym z asymetrią zapisu. W przypadku innych zadańsnapshotmoże zwiększyć wydajność i zmniejszyć rywalizację o transakcje.
Zgłoś problem
- Obsługiwane są tylko ustawienia zapisu
w: 'majority'iw: 1.
Sposób odczytu
- Obsługiwane są tylko ustawienia 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 wyraźnie utworzyć uporządkowany indeks 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 mieć wpływ na wydajność na dużą skalę. - Indeksy bez włączonej obsługi wielu kluczy nie są automatycznie zmieniane na indeksy wielokluczowe na podstawie operacji zapisu. Podczas tworzenia indeksu musisz włączyć obsługę wielu kluczy. Tej opcji nie można zmienić.
Błędy
- Kody błędów i komunikaty o błędach mogą się różnić między Cloud Firestore i MongoDB.
Polecenia
Poniższe różnice w działaniu dotyczą konkretnych poleceń.
- Polecenia, których nie ma w tych tabelach, nie są obsługiwane.
commentjest akceptowany przez większość poleceń, ale jest ignorowany.maxTimeMSjest akceptowany przez większość poleceń, ale może być ignorowany.
Zapytania
i zapisy
| 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 parametr filter, musi on być pusty. |
|
|
(brak) |
Jeśli podano wartość authorizedCollections, musi ona być równa „false”. |
|
|
(brak) |
|
|
|
(brak) |
|
|
|
(brak) |
|
|
|
|
To polecenie nie wykonuje żadnej operacji. Jeśli podano parametr capped, musi on mieć wartość false.
|
|
|
(brak) |
Ograniczenia dotyczące usuwania kolekcji
Podczas usuwania kolekcji 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 powodować przekroczenie limitu czasu połączenia. Jeśli występują przekroczenia limitu czasu, zwiększ termin połączenia. Zamiast tego możesz użyć usuwania zbiorczego.
- Zdarzenia: zdarzenia zbierania danych nie są generowane dla Eventarc, gdy używasz polecenia
drop.
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.