Różnice w zachowaniu

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 _id musi 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 NaN są 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 _id w kolejności rosnącej.

Agregacje

  • Agregacje mogą mieć maksymalnie 250 etapów.
  • Etapy $merge$out nie są obsługiwane. Pełną listę obsługiwanych etapów i operatorów znajdziesz w sekcji polecenia.
  • Etap $facet nie obsługuje etapów wejściowych $rand ani $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 update ani findAndModify.
  • 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, majority i linearizable. Wartość domyślna to snapshot, 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ń snapshot może zwiększyć wydajność i zmniejszyć rywalizację o transakcje.

Zapisuj dane o obawach

  • Obsługiwane są tylko poziomy zapisu w: 'majority'w: 1.

Ustawienia odczytu

  • Obsługiwane są tylko obawy dotyczące odczytu primary, primaryPreferred, primary_preferred, secondary_preferred i nearest.

Indeksy

  • Indeksy wieloznaczne nie są obsługiwane.
  • Cloud Firestore nie tworzy automatycznie indeksu w _id, ale zapewnia, że wartości _id są 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 _id rosną 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.
  • comment jest akceptowany przez większość poleceń, ale jest ignorowany.
  • maxTimeMS jest akceptowane przez większość poleceń, ale może być ignorowane.

Zapytania

i zapisuje

Command Nieobsługiwane pola

find

  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • collation
  • let

insert

(brak)

update

W instrukcji aktualizacji:

  • collation

delete

W instrukcji usuwania:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(brak)

explain

(brak)

Transakcje

i sesje.

Command Nieobsługiwane pola

commitTransaction

(brak)

abortTransaction

(brak)

endSessions

(brak)

Administracja

Command Nieobsługiwane pola Notes

listDatabases

  • authorizedDatabases
Jeśli podano wartość, pole filter musi być puste.

listCollections

(brak)

Jeśli podano wartość, parametr authorizedCollections musi mieć wartość „false”.

listIndexes

(brak)

createIndexes

(brak)

dropIndexes

(brak)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
To polecenie nie wykonuje żadnej operacji.

Jeśli podano wartość, musi ona być fałszywa.capped

drop

(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?