Perbedaan perilaku

Halaman ini menjelaskan perbedaan perilaku antara Cloud Firestore dan MongoDB.

Untuk mengetahui perincian fitur yang didukung bergantung pada versi MongoDB, lihat:

Koneksi dan database

  • Setiap koneksi dibatasi untuk satu database Cloud Firestore.
  • Database harus dibuat sebelum terhubung ke database tersebut.

Penamaan

Perbedaan berikut berlaku untuk penamaan bagian model data Anda.

Koleksi

  • Nama koleksi yang cocok dengan __.*__ tidak didukung.

Kolom

  • Nama kolom yang cocok dengan __.*__ tidak didukung.
  • Nama kolom kosong tidak didukung.

Dokumen

  • Ukuran dokumen maksimum adalah 4 MiB.
  • Kedalaman bertingkat maksimum kolom adalah 20. Setiap kolom berjenis Array dan Objek menambahkan satu tingkat ke kedalaman keseluruhan.

_id

  • Kolom _id tingkat teratas harus berupa ObjectId, String, bilangan bulat 64-bit, bilangan bulat 32-bit, Double, Binary, atau Object. Jenis BSON lainnya tidak didukung.

Nilai

  • Jenis BSON JavaScript, Symbol, DBPointer, dan Undefined tidak didukung.

Tanggal

  • Nilai tanggal harus berada dalam rentang [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z].

Decimal128

  • Nilai NaN, tak terhingga positif, dan tak terhingga negatif dikanonikalisasi saat operasi tulis.
  • Operasi aritmatika pada Decimal128 tidak didukung.

Ganda

  • Nilai NaN dikanonikalisasi saat operasi tulis.

Ekspresi reguler

  • Opsi ekspresi reguler harus valid ("i", "m", "s", "u", atau "x") dan diberikan dalam urutan abjad tanpa pengulangan.

Kueri

  • Tata urutan alami (kueri tanpa pengurutan eksplisit) tidak cocok dengan urutan penyisipan atau urutan berdasarkan _id menaik.

Agregasi

  • Agregasi dibatasi hingga 250 stage.
  • Stage $merge dan $out tidak didukung. Lihat bagian perintah untuk mengetahui daftar lengkap operator dan tahap yang didukung.
  • Tahap $lookup tidak mendukung kolom let dan pipeline.
  • Tahap $facet tidak mendukung $rand di tahap input karena merupakan ekspresi yang tidak stabil.

Tulis

  • Dokumen dengan nama yang diawali dengan tanda dolar ("$") tidak dapat dibuat menggunakan fitur upsert update atau findAndModify.
  • Pastikan string koneksi Anda mencakup retryWrites=false (atau gunakan metode yang sesuai untuk driver Anda) untuk memastikan driver tidak mencoba menggunakan fitur ini. Operasi tulis yang dapat dicoba lagi tidak didukung.

Transaksi

  • Snapshot isolation dan transaksi yang dapat diserialisasi didukung.

  • Secara default, transaksi menggunakan kontrol konkurensi optimis dengan snapshot isolation.

Masalah operasi baca

  • Cloud Firestore mendukung masalah operasi baca snapshot, majority, dan linearizable. Setelan default-nya adalah snapshot yang merujuk pada snapshot isolation.

    Gunakan linearizable jika aplikasi memerlukan konsistensi yang ketat dan harus mencegah anomali skew operasi tulis. Untuk workload lain, snapshot dapat meningkatkan performa dan mengurangi pertentangan transaksi.

Masalah operasi tulis

  • Hanya masalah operasi tulis w: 'majority' dan w: 1 yang didukung.

Preferensi operasi baca

  • Hanya masalah operasi baca primary, primaryPreferred, primary_preferred, secondary_preferred, dan nearest yang didukung.

Indeks

  • Indeks karakter pengganti tidak didukung.
  • Cloud Firestore tidak otomatis membuat indeks pada _id, tetapi memastikan nilai _id bersifat unik dalam suatu koleksi.
  • Indeks tanpa multikey yang diaktifkan tidak otomatis diubah menjadi indeks multikey berdasarkan operasi tulis. Anda harus mengaktifkan multikey saat membuat indeks dan opsi ini tidak dapat diubah.

Error

  • Kode dan pesan error antara Cloud Firestore dan MongoDB bisa saja berbeda.

Perintah

Perbedaan perilaku berikut berlaku untuk perintah tertentu.

  • Perintah yang tidak tercantum dalam tabel berikut tidak didukung.
  • comment diterima oleh sebagian besar perintah, tetapi diabaikan.
  • maxTimeMS diterima oleh sebagian besar perintah, tetapi mungkin diabaikan.

Kueri dan tulis

Perintah Kolom Tidak Didukung

find

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

aggregate

  • collation
  • let

insert

(tidak ada)

update

Dalam pernyataan update:

  • collation

delete

Dalam pernyataan penghapusan:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(tidak ada)

explain

(tidak ada)

Transaksi dan sesi

Perintah Kolom Tidak Didukung

commitTransaction

(tidak ada)

abortTransaction

(tidak ada)

endSessions

(tidak ada)

Administrasi

Perintah Kolom Tidak Didukung Catatan

listDatabases

  • authorizedDatabases
filter harus kosong jika disediakan.

listCollections

(tidak ada)

authorizedCollections harus salah jika disediakan.

listIndexes

(tidak ada)

createIndexes

(tidak ada)

dropIndexes

(tidak ada)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
Perintah ini tanpa pengoperasian.

capped harus bernilai salah (false) jika disediakan.

Langkah berikutnya