หน้านี้อธิบายความแตกต่างด้านลักษณะการทำงานระหว่าง 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 | ฟิลด์ที่ไม่รองรับ |
|---|---|
|
|
|
|
|
|
|
|
(ไม่มี) |
|
|
ภายในคำสั่งอัปเดต ให้ทำดังนี้
|
|
|
ภายในคำสั่งลบ:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(ไม่มี) |
|
|
(ไม่มี) |
ธุรกรรม
และเซสชัน
| Command | ฟิลด์ที่ไม่รองรับ |
|---|---|
|
|
(ไม่มี) |
|
|
(ไม่มี) |
|
|
(ไม่มี) |
การบริหารจัดการ
| Command | ฟิลด์ที่ไม่รองรับ | หมายเหตุ |
|---|---|---|
|
|
|
filter ต้องว่างเปล่าหากระบุไว้ |
|
|
(ไม่มี) |
authorizedCollections ต้องเป็นเท็จ หากระบุไว้ |
|
|
(ไม่มี) |
|
|
|
(ไม่มี) |
|
|
|
(ไม่มี) |
|
|
|
|
คำสั่งนี้ไม่มีผลcapped ต้องเป็นเท็จหากระบุไว้
|
|
|
(ไม่มี) |
ข้อจำกัดในการรวบรวมการดรอป
ข้อจำกัดต่อไปนี้จะมีผลเมื่อคุณวางคอลเล็กชัน
- การสร้างดัชนีใหม่: คุณไม่สามารถสร้างการกำหนดค่าดัชนีเดียวกันทันทีหลังจากที่ลบไปแล้ว คุณต้องรอให้การลบเบื้องหลังเสร็จสิ้น
- ขีดจำกัดขนาด: การวางคอลเล็กชันขนาดใหญ่อาจส่งผลให้การเชื่อมต่อหมดเวลา เพิ่มกำหนดเวลาการเชื่อมต่อหากเห็นการหมดเวลา คุณสามารถใช้การลบหลายรายการพร้อมกันแทนได้
- เหตุการณ์: ระบบจะไม่สร้างเหตุการณ์การวางคอลเล็กชันสำหรับ Eventarc เมื่อใช้คำสั่ง
drop
ขั้นตอนถัดไป
- เรียกใช้ คู่มือเริ่มใช้งานฉบับย่อ: สร้างฐานข้อมูลและเชื่อมต่อ
- ดูรายการฟีเจอร์ที่รองรับทั้งหมดได้ที่ประเภทข้อมูล ไดรเวอร์ และฟีเจอร์ของ MongoDB ที่รองรับ