Różnice w zachowaniu

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 _id 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 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 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 _id rosnąco.

Agregacje

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

Zgłoś problem

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

Sposób odczytu

  • Obsługiwane są tylko ustawienia 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 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 _id rosną 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.
  • comment jest akceptowany przez większość poleceń, ale jest ignorowany.
  • maxTimeMS jest akceptowany przez większość poleceń, ale może być ignorowany.

Zapytania

i zapisy

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 parametr filter, musi on być pusty.

listCollections

(brak)

Jeśli podano wartość authorizedCollections, musi ona być równa „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 parametr capped, musi on mieć wartość false.

drop

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