Sự khác biệt về hành vi

Trang này mô tả sự khác biệt về hành vi giữa Cloud Firestore và MongoDB.

Để biết thông tin chi tiết về các tính năng được hỗ trợ tuỳ theo phiên bản MongoDB, hãy xem:

Kết nối và cơ sở dữ liệu

  • Mỗi kết nối chỉ được liên kết với một cơ sở dữ liệu Cloud Firestore.
  • Bạn phải tạo cơ sở dữ liệu trước khi kết nối với cơ sở dữ liệu đó.

Đặt tên

Sau đây là những điểm khác biệt khi đặt tên cho các phần trong mô hình dữ liệu.

Bộ sưu tập

  • Không hỗ trợ tên bộ sưu tập khớp với __.*__.

Trường

  • Không hỗ trợ tên trường khớp với __.*__.
  • Không hỗ trợ tên trường trống.

Tài liệu

  • Kích thước tài liệu tối đa là 16 MiB.
  • Độ sâu lồng tối đa của các trường là 20. Mỗi trường thuộc loại Mảng và Đối tượng sẽ thêm một cấp vào độ sâu tổng thể.
  • Trong các sự kiện Eventarc, tài liệu lớn hơn 10 MiB sẽ không được đưa vào tải trọng sự kiện.

_id trường

  • Trường _id cấp cao nhất phải là ObjectId, Chuỗi, số nguyên 64 bit, số nguyên 32 bit, Double, Binary hoặc Object. Các loại BSON khác không được hỗ trợ.

Giá trị

  • Các loại BSON JavaScript, Symbol, DBPointer và Undefined không được hỗ trợ.

Ngày

  • Giá trị ngày phải nằm trong [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z].

Decimal128

  • Giá trị NaN, giá trị dương vô cực và giá trị âm vô cực được chuẩn hoá khi ghi.
  • Không hỗ trợ các phép toán số học trên Decimal128.

Giường đôi

  • Giá trị NaN được chuẩn hoá khi ghi.

Biểu thức chính quy

  • Các tuỳ chọn biểu thức chính quy phải hợp lệ ("i", "m", "s", "u" hoặc "x") và được cung cấp theo thứ tự bảng chữ cái mà không lặp lại.

Cụm từ tìm kiếm

  • Thứ tự sắp xếp tự nhiên (các truy vấn không có thứ tự sắp xếp rõ ràng) không khớp với thứ tự chèn hoặc thứ tự tăng dần theo _id.

Tổng hợp

  • Các phép tổng hợp chỉ được có tối đa 250 giai đoạn.
  • Các giai đoạn $merge và $out không được hỗ trợ. Hãy xem phần lệnh để biết danh sách đầy đủ các giai đoạn và toán tử được hỗ trợ.
  • Giai đoạn $facet không hỗ trợ $rand hoặc $sample trong các giai đoạn đầu vào vì đây là biểu thức không ổn định.

Hoạt động ghi

  • Bạn không thể tạo tài liệu có tên bắt đầu bằng ký hiệu đô la ("$") bằng tính năng upsert của update hoặc findAndModify.
  • Đảm bảo chuỗi kết nối của bạn bao gồm retryWrites=false (hoặc sử dụng phương thức phù hợp với trình điều khiển của bạn) để đảm bảo trình điều khiển không cố gắng sử dụng tính năng này. Không hỗ trợ thao tác ghi có thể thử lại.

Giao dịch

  • Hỗ trợ mức cô lập snapshot và giao dịch có thể tuần tự hoá.

  • Theo mặc định, các giao dịch sử dụng chế độ kiểm soát đồng thời lạc quan với tính năng cô lập ảnh chụp nhanh.

Đọc dữ liệu về mối lo ngại

  • Cloud Firestore hỗ trợ các mối lo ngại về việc đọc snapshot, majority và linearizable. Giá trị mặc định là snapshot, tức là cô lập snapshot.

    Sử dụng linearizable khi ứng dụng yêu cầu tính nhất quán nghiêm ngặt và phải ngăn chặn các điểm bất thường về độ lệch ghi. Đối với các khối lượng công việc khác, snapshot có thể cải thiện hiệu suất và giảm tranh chấp giao dịch.

Ghi dữ liệu về mối lo ngại

  • Chỉ hỗ trợ các mối lo ngại về việc ghi w: 'majority' và w: 1.

Lựa chọn ưu tiên về chế độ đọc

  • Chỉ hỗ trợ các mối lo ngại về việc đọc primary, primaryPreferred, primary_preferred, secondary_preferred và nearest.

Chỉ số

  • Không hỗ trợ chỉ mục ký tự đại diện.
  • Cloud Firestore không tự động tạo chỉ mục trên _id, nhưng đảm bảo các giá trị của _id là duy nhất trong một tập hợp. Để đạt được hành vi sắp xếp tương tự, bạn cần tạo rõ ràng một chỉ mục có thứ tự trên trường _id. Tuy nhiên, hãy lưu ý đến các vấn đề tiềm ẩn về điểm phát sóng, đặc biệt là nếu các giá trị _id của bạn tăng hoặc giảm đơn điệu (ví dụ: dấu thời gian), vì điều này có thể ảnh hưởng đến hiệu suất trên quy mô lớn.
  • Các chỉ mục không bật nhiều khoá sẽ không tự động thay đổi thành chỉ mục nhiều khoá dựa trên các thao tác ghi. Bạn phải bật tính năng nhiều khoá khi tạo chỉ mục và không thể thay đổi lựa chọn này.

Lỗi

  • Mã lỗi và thông báo lỗi có thể khác nhau giữa Cloud Firestore và MongoDB.

Lệnh

Những điểm khác biệt sau đây về hành vi áp dụng cho các lệnh cụ thể.

  • Các lệnh không có trong bảng sau đây sẽ không được hỗ trợ.
  • comment được hầu hết các lệnh chấp nhận nhưng bị bỏ qua.
  • Hầu hết các lệnh đều chấp nhận maxTimeMS nhưng có thể bị bỏ qua.

Cụm từ tìm kiếm

và ghi

Command Trường không được hỗ trợ

find

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

aggregate

  • collation
  • let

insert

(không có)

update

Trong câu lệnh cập nhật:

  • collation

delete

Trong câu lệnh xoá:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(không có)

explain

(không có)

Giao dịch

và phiên hoạt động

Command Trường không được hỗ trợ

commitTransaction

(không có)

abortTransaction

(không có)

endSessions

(không có)

Quản trị

Command Trường không được hỗ trợ Ghi chú

listDatabases

  • authorizedDatabases
filter phải để trống nếu được cung cấp.

listCollections

(không có)

authorizedCollections phải là false nếu được cung cấp.

listIndexes

(không có)

createIndexes

(không có)

dropIndexes

(không có)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
Lệnh này không hoạt động.

capped phải là false nếu được cung cấp.

drop

(không có)

Giới hạn về việc bỏ bộ sưu tập

Các giới hạn sau đây sẽ áp dụng khi bạn loại bỏ một tập hợp:

  • Tạo lại chỉ mục: Bạn không thể tạo cùng một cấu hình chỉ mục ngay sau khi xoá. Bạn phải đợi quá trình xoá trong nền hoàn tất.
  • Giới hạn kích thước: Việc xoá các tập hợp lớn có thể dẫn đến tình trạng hết thời gian kết nối. Tăng thời hạn kết nối nếu bạn thấy hết thời gian chờ. Bạn có thể sử dụng tính năng xoá hàng loạt để thay thế.
  • Sự kiện: Sự kiện thu thập dữ liệu bị loại bỏ không được tạo cho Eventarc khi sử dụng lệnh drop.

Bước tiếp theo