Różnice w zachowaniu

Dotyczy tylko wersji Cloud Firestore Enterprise.

Na tej stronie opisujemy różnice w działaniu między Cloud Firestore w trybie zgodności z MongoDB a 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 jednej bazy danych Cloud Firestore w trybie zgodności z MongoDB.
  • Zanim połączysz się 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 __.*__ nie są obsługiwane.
  • Puste nazwy pól nie są obsługiwane.

Dokumenty

  • Maksymalny rozmiar dokumentu to 4 MiB.
  • Maksymalna głębokość umieszczania pól to 20. Każde pole typu Array i Object dodaje jeden poziom do ogólnej głębokości.

_id

  • Dokument _id (pole najwyższego poziomu) musi być identyfikatorem ObjectId, ciągiem znaków lub 64-bitową liczbą całkowitą. Inne typy BSON nie są obsługiwane.
  • Pusty ciąg znaków („”) i 64-bitowa wartość 0 (0L) 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

  • Naturalny porządek 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 są ograniczone do 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 $lookup jest ograniczony do określenia foreignField na urządzeniu _id.

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 połączenia zawiera retryWrites=false (lub użyj metody odpowiedniej dla Twojego sterownika), aby sterownik nie próbował używać tej funkcji. Ponawialne zapisy nie są obsługiwane.

Transakcje

  • Obsługiwane są izolacja zrzutu i transakcje serializowalne.

  • Domyślnie transakcje korzystają z optymistycznej kontroli współbieżności z izolacją migawek.

Odczytywanie problemu

  • Cloud Firestore w trybie zgodności z MongoDB obsługuje poziomy 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 niezgodnością zapisu. W przypadku innych obciążeń snapshot może zwiększyć wydajność i zmniejszyć rywalizację o transakcje.

Zapisywanie obaw

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

Ustawienia czytania

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

Indeksy

  • Indeksy wieloznaczne nie są obsługiwane.
  • Cloud Firestore w trybie zgodności z MongoDB nie tworzy automatycznie indeksu w polu _id, ale zapewnia, że wartości w polu _id są unikalne w kolekcji.
  • Indeksy bez włączonej obsługi wielu kluczy nie są automatycznie zmieniane na indeksy z obsługą 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 przypadku Cloud Firestore w trybie zgodności z MongoDB 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.
  • maxTimeMS jest akceptowane przez większość poleceń, ale może być ignorowane.

Zapytania i zapisy

Command Nieobsługiwane pola

find

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

aggregate

  • bypassDocumentValidation
  • readConcern
  • collation
  • hint
  • comment
  • let

insert

  • bypassDocumentValidation
  • comment

update

  • collation
  • arrayFilters
  • hint

delete

  • comment
  • write

W instrukcji usuwania:

  • collation
  • hint

findAndModify

  • fields
  • bypassDocumentValidation
  • collation
  • arrayFilters
  • hint
  • comment
  • let

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(brak)

Transakcje i sesje

Command Nieobsługiwane pola

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(brak)

Administracja

Command Nieobsługiwane pola Notes

listDatabases

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

listCollections

  • comment
Jeśli podano wartość, authorizedCollections musi mieć wartość false.

listIndexes

  • comment

createCollection

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

capped musi mieć wartość false, jeśli jest podane.

Co dalej?