ความแตกต่างของลักษณะการทำงาน

หน้านี้อธิบายความแตกต่างด้านลักษณะการทำงานระหว่าง Cloud Firestore กับ MongoDB

ดูรายละเอียดฟีเจอร์ที่รองรับตามเวอร์ชัน MongoDB ได้ที่หัวข้อต่อไปนี้

การเชื่อมต่อและฐานข้อมูล

  • การเชื่อมต่อแต่ละรายการจำกัดไว้ที่ฐานข้อมูล Cloud Firestore เดียว
  • คุณต้องสร้างฐานข้อมูลก่อนที่จะเชื่อมต่อ

การตั้งชื่อ

ความแตกต่างต่อไปนี้มีผลกับการตั้งชื่อส่วนต่างๆ ของโมเดลข้อมูล

คอลเล็กชัน

  • ไม่รองรับชื่อคอลเล็กชันที่ตรงกับ __.*__

ช่อง

  • ระบบไม่รองรับชื่อช่องที่ตรงกับ __.*__
  • ไม่รองรับชื่อช่องที่ว่างเปล่า

เอกสาร

  • ขนาดเอกสารสูงสุดคือ 16 MiB
  • ความลึกของการฝังช่องสูงสุดคือ 20 ช่องประเภทอาร์เรย์และออบเจ็กต์แต่ละช่องจะเพิ่มความลึกโดยรวม 1 ระดับ
  • ในเหตุการณ์ Eventarc ระบบจะไม่รวมเอกสารที่มีขนาดใหญ่กว่า 10 MiB ไว้ในเพย์โหลดของเหตุการณ์

ช่อง _id

  • ฟิลด์ _id ระดับบนสุดต้องเป็น ObjectId, สตริง, จำนวนเต็ม 64 บิต, จำนวนเต็ม 32 บิต, Double, ไบนารี หรือออบเจ็กต์ ระบบไม่รองรับ BSON ประเภทอื่นๆ

ค่า

  • ระบบไม่รองรับประเภท BSON ของ JavaScript, Symbol, DBPointer และ Undefined

วันที่

  • ค่าวันที่ต้องอยู่ใน [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z]

Decimal128

  • ค่า NaN, ค่าอนันต์บวก และค่าอนันต์ลบจะได้รับการแปลงเป็นรูปแบบมาตรฐานเมื่อเขียน
  • ไม่รองรับการดำเนินการทางคณิตศาสตร์ใน Decimal128

เตียงคู่

  • ค่า NaN จะได้รับการแปลงเป็นรูปแบบ Canonical เมื่อเขียน

นิพจน์ทั่วไป

  • ตัวเลือกนิพจน์ทั่วไปต้องถูกต้อง ("i", "m", "s", "u" หรือ "x") และระบุตามลำดับตัวอักษรโดยไม่มีการซ้ำ

คำค้นหา

  • ลำดับการจัดเรียงตามธรรมชาติ (การค้นหาที่ไม่มีการจัดเรียงที่ชัดเจน) ไม่ตรงกับลำดับการแทรกหรือลำดับตาม _id จากน้อยไปมาก

การรวม

  • การรวมข้อมูลจำกัดไว้ที่ 250 ขั้นตอน
  • ไม่รองรับระยะ $merge และ $out ดูรายการระยะและโอเปอเรเตอร์ที่รองรับทั้งหมดได้ในส่วนคำสั่ง
  • ระยะ $facet ไม่รองรับ $rand หรือ $sample ในระยะอินพุตเนื่องจากเป็นนิพจน์ที่ผันผวน

การเขียน

  • คุณไม่สามารถสร้างเอกสารที่มีชื่อขึ้นต้นด้วยเครื่องหมายดอลลาร์ ("$") โดยใช้ฟีเจอร์ Upsert ของ update หรือ findAndModify
  • ตรวจสอบว่าสตริงการเชื่อมต่อมี retryWrites=false (หรือใช้วิธีที่เหมาะสมกับไดรเวอร์) เพื่อให้แน่ใจว่าไดรเวอร์จะไม่พยายามใช้ฟีเจอร์นี้ ระบบไม่รองรับการเขียนที่ลองใหม่ได้

ธุรกรรม

  • รองรับการแยกสแนปชอตและธุรกรรมที่เรียงอันดับได้

  • โดยค่าเริ่มต้น ธุรกรรมจะใช้การควบคุมการเกิดขึ้นพร้อมกันในแง่ดีกับการแยกสแนปชอต

อ่านข้อมูลข้อกังวล

  • Cloud Firestore รองรับข้อกังวลด้านการอ่าน snapshot, majority และ linearizable ค่าเริ่มต้นคือ snapshot ซึ่งหมายถึงการแยกสแนปชอต

    ใช้ linearizable เมื่อแอปพลิเคชันต้องการความสอดคล้องที่เข้มงวดและต้องป้องกันความผิดปกติของการเขียนที่ผิดพลาด สำหรับภาระงานอื่นๆ snapshot จะช่วยปรับปรุงประสิทธิภาพและลดการแย่งชิงธุรกรรมได้

เขียนข้อกังวล

  • รองรับเฉพาะข้อกังวลด้านการเขียน w: 'majority' และ w: 1 เท่านั้น

ค่ากำหนดการอ่าน

  • ระบบรองรับเฉพาะข้อกังวลด้านการอ่าน primary, primaryPreferred, primary_preferred, secondary_preferred และ nearest เท่านั้น

ดัชนี

  • ระบบไม่รองรับดัชนีไวลด์การ์ด
  • Cloud Firestore ไม่ได้สร้างดัชนีใน _id โดยอัตโนมัติ แต่จะตรวจสอบว่าค่าของ _id ไม่ซ้ำกันภายในคอลเล็กชัน หากต้องการให้มีลักษณะการจัดเรียงที่คล้ายกัน คุณต้องสร้างดัชนีที่เรียงลำดับในฟิลด์ _id อย่างชัดเจน อย่างไรก็ตาม โปรดระวังปัญหาฮอตสปอตที่อาจเกิดขึ้น โดยเฉพาะอย่างยิ่งหากค่า _id ของคุณเพิ่มขึ้นหรือลดลงแบบโมโนโทนิก (เช่น การประทับเวลา) เนื่องจากอาจส่งผลต่อประสิทธิภาพในวงกว้าง
  • ดัชนีที่ไม่ได้เปิดใช้ Multi-Key จะไม่เปลี่ยนเป็นดัชนี Multi-Key โดยอัตโนมัติตามการดำเนินการเขียน คุณต้องเปิดใช้ Multi-key เมื่อสร้างดัชนี และจะเปลี่ยนตัวเลือกไม่ได้

ข้อผิดพลาด

  • รหัสข้อผิดพลาดและข้อความอาจแตกต่างกันระหว่าง Cloud Firestore และ MongoDB

คำสั่ง

ความแตกต่างของลักษณะการทำงานต่อไปนี้จะมีผลกับคำสั่งที่เฉพาะเจาะจง

  • ระบบไม่รองรับคำสั่งที่ไม่ได้ระบุไว้ในตารางต่อไปนี้
  • คำสั่งส่วนใหญ่ยอมรับ comment แต่จะละเว้น
  • คำสั่งส่วนใหญ่ยอมรับ maxTimeMS แต่อาจละเว้นได้

คำค้นหา

และเขียน

Command ฟิลด์ที่ไม่รองรับ

find

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

aggregate

  • collation
  • let

insert

(ไม่มี)

update

ภายในคำสั่งอัปเดต ให้ทำดังนี้

  • collation

delete

ภายในคำสั่งลบ:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(ไม่มี)

explain

(ไม่มี)

ธุรกรรม

และเซสชัน

Command ฟิลด์ที่ไม่รองรับ

commitTransaction

(ไม่มี)

abortTransaction

(ไม่มี)

endSessions

(ไม่มี)

การบริหารจัดการ

Command ฟิลด์ที่ไม่รองรับ หมายเหตุ

listDatabases

  • authorizedDatabases
filter ต้องว่างเปล่าหากระบุไว้

listCollections

(ไม่มี)

authorizedCollections ต้องเป็นเท็จ หากระบุไว้

listIndexes

(ไม่มี)

createIndexes

(ไม่มี)

dropIndexes

(ไม่มี)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
คำสั่งนี้ไม่มีผล

capped ต้องเป็นเท็จหากระบุไว้

drop

(ไม่มี)

ข้อจำกัดในการรวบรวมการดรอป

ข้อจำกัดต่อไปนี้จะมีผลเมื่อคุณวางคอลเล็กชัน

  • การสร้างดัชนีใหม่: คุณไม่สามารถสร้างการกำหนดค่าดัชนีเดียวกันทันทีหลังจากที่ลบไปแล้ว คุณต้องรอให้การลบเบื้องหลังเสร็จสิ้น
  • ขีดจำกัดขนาด: การวางคอลเล็กชันขนาดใหญ่อาจส่งผลให้การเชื่อมต่อหมดเวลา เพิ่มกำหนดเวลาการเชื่อมต่อหากเห็นการหมดเวลา คุณสามารถใช้การลบหลายรายการพร้อมกันแทนได้
  • เหตุการณ์: ระบบจะไม่สร้างเหตุการณ์การวางคอลเล็กชันสำหรับ Eventarc เมื่อใช้คำสั่ง drop

ขั้นตอนถัดไป