Differenze di comportamento

Questa pagina descrive le differenze di comportamento tra Cloud Firestore e MongoDB.

Per un'analisi dettagliata delle funzionalità supportate in base alla versione di MongoDB, consulta:

Connessioni e database

  • Ogni connessione è limitata a un singolo database Cloud Firestore.
  • Prima di connetterti a un database, devi crearlo.

Denominazione

Le seguenti differenze si applicano alla denominazione delle parti del modello di dati.

Raccolte

  • I nomi delle raccolte corrispondenti a __.*__ non sono supportati.

Campi

  • I nomi dei campi corrispondenti a __.*__ non sono supportati.
  • I nomi dei campi vuoti non sono supportati.

Documenti

  • La dimensione massima del documento è di 16 MiB.
  • La profondità massima di nidificazione dei campi è 20. Ogni campo di tipo Array e Object aggiunge un livello alla profondità complessiva.
  • Negli eventi Eventarc, i documenti di dimensioni superiori a 10 MiB non sono inclusi nel payload dell'evento.

Campo _id

  • Il campo _id di primo livello deve essere un ObjectId, una stringa, un numero intero a 64 bit, un numero intero a 32 bit, un valore Double, un valore binario o un oggetto. Altri tipi BSON non sono supportati.

Valori

  • I tipi BSON JavaScript, Symbol, DBPointer e Undefined non sono supportati.

Data

  • I valori delle date devono rientrare in [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z].

Decimal128

  • I valori NaN, infinito positivo e infinito negativo vengono normalizzati in fase di scrittura.
  • Le operazioni aritmetiche su Decimal128 non sono supportate.

Doppio

  • I valori NaN vengono canonizzati in fase di scrittura.

Espressione regolare

  • Le opzioni delle espressioni regolari devono essere valide ("i", "m", "s", "u" o "x") e fornite in ordine alfabetico senza ripetizioni.

Query

  • L'ordinamento naturale (query senza un ordinamento esplicito) non corrisponde all'ordine di inserimento o all'ordinamento per _id in ordine crescente.

Aggregazioni

  • Le aggregazioni sono limitate a 250 fasi.
  • Le fasi $merge e $out non sono supportate. Consulta la sezione Comandi per un elenco completo delle fasi e degli operatori supportati.
  • La fase $facet non supporta $rand o $sample nelle fasi di input perché è un'espressione volatile.

Scritture

  • I documenti con nomi che iniziano con un segno di dollaro ("$") non possono essere creati utilizzando la funzionalità di upsert di update o findAndModify.
  • Assicurati che la stringa di connessione includa retryWrites=false (o utilizza il metodo appropriato per il tuo driver) per assicurarti che il driver non tenti di utilizzare questa funzionalità. Le scritture ripetibili non sono supportate.

Transazioni

  • Sono supportati l'isolamento degli snapshot e le transazioni serializzabili.

  • Per impostazione predefinita, le transazioni utilizzano controlli della concorrenza ottimistici con isolamento degli snapshot.

Lettura di dati sui problemi

  • Cloud Firestore supporta i problemi di lettura snapshot, majority e linearizable. Il valore predefinito è snapshot, che si riferisce all'isolamento degli snapshot.

    Utilizza linearizable quando l'applicazione richiede una coerenza rigorosa e deve impedire anomalie di disallineamento della scrittura. Per altri workload, snapshot può migliorare le prestazioni e ridurre la contesa delle transazioni.

Scrittura di dati sui problemi

  • Sono supportati solo i write concern w: 'majority' e w: 1.

Preferenza di lettura

  • Sono supportati solo i read concern primary, primaryPreferred, primary_preferred, secondary_preferred e nearest.

Indici

  • Gli indici con caratteri jolly non sono supportati.
  • Cloud Firestore non crea automaticamente un indice su _id, ma garantisce che i valori di _id siano univoci all'interno di una raccolta. Per ottenere un comportamento di ordinamento simile, devi creare esplicitamente un indice ordinato nel campo _id. Tuttavia, tieni presente i potenziali problemi di hotspot, soprattutto se i valori _id aumentano o diminuiscono in modo monotono (ad esempio i timestamp), in quanto ciò può influire sulle prestazioni su larga scala.
  • Gli indici senza chiave multipla abilitata non vengono modificati automaticamente in indici con chiave multipla in base alle operazioni di scrittura. Devi abilitare la funzionalità multichiave quando crei l'indice e l'opzione non può essere modificata.

Errori

  • I codici e i messaggi di errore possono variare tra Cloud Firestore e MongoDB.

Comandi

Le seguenti differenze di comportamento si applicano a comandi specifici.

  • I comandi non elencati nelle seguenti tabelle non sono supportati.
  • comment è accettato dalla maggior parte dei comandi, ma viene ignorato.
  • maxTimeMS è accettato dalla maggior parte dei comandi, ma potrebbe essere ignorato.

Query

e scritture

Comando Campi non supportati

find

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

aggregate

  • collation
  • let

insert

(nessuno)

update

All'interno di un'istruzione UPDATE:

  • collation

delete

All'interno di un'istruzione DELETE:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(nessuno)

explain

(nessuno)

Transazioni

e sessioni

Comando Campi non supportati

commitTransaction

(nessuno)

abortTransaction

(nessuno)

endSessions

(nessuno)

Amministrazione

Comando Campi non supportati Note

listDatabases

  • authorizedDatabases
filter deve essere vuoto, se fornito.

listCollections

(nessuno)

Se fornito, authorizedCollections deve essere false.

listIndexes

(nessuno)

createIndexes

(nessuno)

dropIndexes

(nessuno)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
Questo comando non esegue alcuna operazione.

capped deve essere false se fornito.

drop

(nessuno)

Limitazioni per l'eliminazione delle raccolte

Quando elimini una raccolta, si applicano le seguenti limitazioni:

  • Ricreazione dell'indice: non puoi creare la stessa configurazione dell'indice immediatamente dopo un'eliminazione. Devi attendere il completamento dell'eliminazione in background.
  • Limite di dimensioni: l'eliminazione di raccolte di grandi dimensioni potrebbe causare timeout della connessione. Se si verificano timeout, aumenta la scadenza della connessione. In alternativa, puoi utilizzare l'eliminazione collettiva.
  • Eventi: gli eventi di raccolta di eliminazione non vengono generati per Eventarc quando utilizzi il comando drop.

Passaggi successivi