Verhaltensunterschiede

Auf dieser Seite werden die Verhaltensunterschiede zwischen Cloud Firestore und MongoDB beschrieben.

Eine Übersicht der unterstützten Funktionen je nach MongoDB-Version finden Sie hier:

Verbindungen und Datenbanken

  • Jede Verbindung ist auf eine einzelne Cloud Firestore-Datenbank beschränkt.
  • Eine Datenbank muss erstellt werden, bevor eine Verbindung zu ihr hergestellt werden kann.

Benennung

Die folgenden Unterschiede gelten für die Benennung von Teilen Ihres Datenmodells.

Sammlungen

  • Sammlungsnamen, die mit __.*__ übereinstimmen, werden nicht unterstützt.

Felder

  • Feldnamen, die mit __.*__ übereinstimmen, werden nicht unterstützt.
  • Leere Feldnamen werden nicht unterstützt.

Dokumente

  • Die maximale Dokumentgröße beträgt 16 MiB.
  • Die maximale Verschachtelungstiefe von Feldern beträgt 20. Jedes Feld vom Typ „Array“ und „Objekt“ erhöht die Gesamttiefe um eine Ebene.
  • In Eventarc-Ereignissen sind Dokumente, die größer als 10 MiB sind, nicht in der Ereignisnutzlast enthalten.

Feld _id

  • Das übergeordnete Feld _id muss eine ObjectId, ein String, eine 64-Bit-Ganzzahl, eine 32-Bit-Ganzzahl, ein Double, ein Binärwert oder ein Objekt sein. Andere BSON-Typen werden nicht unterstützt.

Werte

  • Die BSON-Typen JavaScript, Symbol, DBPointer und Undefined werden nicht unterstützt.

Datum

  • Datumswerte müssen in [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z] liegen.

Decimal128

  • NaN, positive Unendlichkeit und negative Unendlichkeit werden beim Schreiben kanonisiert.
  • Arithmetische Vorgänge für Decimal128 werden nicht unterstützt.

Doppelt

  • NaN-Werte werden beim Schreiben kanonisiert.

Regulärer Ausdruck

  • Die Optionen für reguläre Ausdrücke müssen gültig sein („i“, „m“, „s“, „u“ oder „x“) und in alphabetischer Reihenfolge ohne Wiederholungen angegeben werden.

Abfragen

  • Die natürliche Sortierreihenfolge (Abfragen ohne explizite Sortierung) entspricht nicht der Einfügereihenfolge oder der aufsteigenden Sortierung nach _id.

Zusammenfassungen

  • Aggregationen sind auf 250 Phasen beschränkt.
  • Die Phasen $merge und $out werden nicht unterstützt. Eine vollständige Liste der unterstützten Phasen und Operatoren finden Sie im Abschnitt Befehle.
  • Die Phase $facet unterstützt $rand oder $sample in den Eingabephasen nicht, da es sich um einen flüchtigen Ausdruck handelt.

Schreibvorgänge

  • Dokumente, deren Namen mit einem Dollarzeichen („$“) beginnen, können nicht mit der Upsert-Funktion von update oder findAndModify erstellt werden.
  • Achten Sie darauf, dass Ihr Verbindungsstring retryWrites=false enthält (oder verwenden Sie die für Ihren Treiber geeignete Methode), damit der Treiber nicht versucht, diese Funktion zu verwenden. Wiederholbare Schreibvorgänge werden nicht unterstützt.

Transaktionen

  • Snapshot-Isolation und serialisierbare Transaktionen werden unterstützt.

  • Standardmäßig werden für Transaktionen optimistische Nebenläufigkeitserkennungen mit Snapshot-Isolierung verwendet.

Bedenken lesen

  • Cloud Firestore unterstützt die Leseeinstellungen snapshot, majority und linearizable. Der Standardwert ist snapshot, was sich auf die Snapshot-Isolierung bezieht.

    Verwenden Sie linearizable, wenn die Anwendung strikte Konsistenz erfordert und Schreibabweichungen verhindert werden müssen. Bei anderen Arbeitslasten kann snapshot die Leistung verbessern und Transaktionskonflikte reduzieren.

Anliegen schreiben

  • Es werden nur die Schreibvorgänge w: 'majority' und w: 1 unterstützt.

Leseeinstellung

  • Es werden nur die Lesebedenken primary, primaryPreferred, primary_preferred, secondary_preferred und nearest unterstützt.

Indexe

  • Platzhalterindexe werden nicht unterstützt.
  • Cloud Firestore erstellt nicht automatisch einen Index für _id, sorgt aber dafür, dass die Werte von _id innerhalb einer Sammlung eindeutig sind. Wenn Sie ein ähnliches Sortierverhalten erreichen möchten, müssen Sie explizit einen sortierten Index für das Feld _id erstellen. Achten Sie jedoch auf potenzielle Hotspot-Probleme, insbesondere wenn Ihre _id-Werte monoton steigen oder fallen (z.B. Zeitstempel), da sich dies auf die Leistung bei großen Datenmengen auswirken kann.
  • Indexe ohne aktivierten Multi-Key werden nicht automatisch basierend auf Schreibvorgängen in Multi-Key-Indexe geändert. Sie müssen die Option für mehrere Schlüssel beim Erstellen des Index aktivieren. Sie kann nicht mehr geändert werden.

Fehler

  • Fehlercodes und -meldungen können sich zwischen Cloud Firestore und MongoDB unterscheiden.

Befehle

Die folgenden Verhaltensunterschiede gelten für bestimmte Befehle.

  • Befehle, die nicht in den folgenden Tabellen aufgeführt sind, werden nicht unterstützt.
  • comment wird von den meisten Befehlen akzeptiert, aber ignoriert.
  • maxTimeMS wird von den meisten Befehlen akzeptiert, kann aber ignoriert werden.

Abfragen

und Schreibvorgänge

Befehl Nicht unterstützte Felder

find

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

aggregate

  • collation
  • let

insert

(keine)

update

In einer Update-Anweisung:

  • collation

delete

In einer DELETE-Anweisung:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(keine)

explain

(keine)

Transaktionen

und Sitzungen

Befehl Nicht unterstützte Felder

commitTransaction

(keine)

abortTransaction

(keine)

endSessions

(keine)

Verwaltung

Befehl Nicht unterstützte Felder Hinweise

listDatabases

  • authorizedDatabases
filter muss leer sein, wenn angegeben.

listCollections

(keine)

authorizedCollections muss „false“ sein, wenn angegeben.

listIndexes

(keine)

createIndexes

(keine)

dropIndexes

(keine)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
Dieser Befehl ist ein No-Op.

capped muss „false“ sein, falls angegeben.

drop

(keine)

Einschränkungen beim Löschen von Sammlungen

Beim Löschen einer Sammlung gelten die folgenden Einschränkungen:

  • Index neu erstellen: Sie können dieselbe Indexkonfiguration nicht sofort nach dem Löschen erstellen. Sie müssen warten, bis der Löschvorgang im Hintergrund abgeschlossen ist.
  • Größenbeschränkung: Das Löschen großer Sammlungen kann zu Zeitüberschreitungen bei der Verbindung führen. Erhöhen Sie die Verbindungsfrist, wenn Zeitüberschreitungen auftreten. Alternativ können Sie die Bulk-Löschung verwenden.
  • Ereignisse: Wenn Sie den Befehl drop verwenden, werden für Eventarc keine Ereignisse zum Löschen von Sammlungen generiert.

Nächste Schritte