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
Poniższe różnice dotyczą nazewnictwa części modelu danych.
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
_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, dodatnia nieskończoność i ujemna nieskończoność są kanonizowane podczas zapisu. - Operacje arytmetyczne na Decimal128 nie są obsługiwane.
Liczba zmiennoprzecinkowa
- Wartości
NaNsą przekształcane do postaci kanonicznej podczas zapisu.
Wyrażenie regularne
- Opcje wyrażeń regularnych 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 do 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 poprawić 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 te ustawienia read concern:
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 opcji wielu kluczy nie są automatycznie zmieniane na indeksy z wieloma kluczami 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ć w przypadku 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 parametr authorizedCollections, musi on mieć wartość „fałsz”. |
|
|
(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, wydłuż czas oczekiwania na połączenie. 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.