การแปลง SQL เป็น NoSQL
วางคำสั่ง SQL SELECT หนึ่งคำสั่ง แล้วตัวแปลงจะเขียนใหม่ให้เป็นคำสั่ง find() ของ MongoDB ที่เทียบเท่ากัน โดยจับคู่คอลัมน์ที่เลือกกับการฉายข้อมูล (projection) จับคู่ประโยค WHERE กับตัวกรอง จับคู่ ORDER BY กับ .sort() และจับคู่ LIMIT กับ .limit() นี่คือเครื่องมือเขียนคำสั่งใหม่สำหรับคำสั่งอย่างง่าย ไม่ใช่เครื่องมือย้ายข้อมูล ไม่รองรับ JOIN, GROUP BY, การรวมข้อมูล และคำค้นย่อย
การแปลงทำงานอย่างไร
-
1
แยกวิเคราะห์คำสั่ง SELECT
เครื่องมือนี้อ่านคำสั่งเดียวในรูปแบบ `SELECT คอลัมน์ FROM ตาราง [WHERE ...] [ORDER BY ...] [LIMIT n]`
-
2
จับคู่แต่ละประโยค
คอลัมน์กลายเป็นการฉายข้อมูล `{ col: 1 }`, `WHERE` กลายเป็นตัวกรอง, `ORDER BY` กลายเป็น `.sort()` และ `LIMIT` กลายเป็น `.limit()`
-
3
แปลตัวดำเนินการ
ตัวดำเนินการเปรียบเทียบถูกจับคู่กับตัวดำเนินการของ Mongo: `>` เป็น `$gt`, `<` เป็น `$lt`, `>=` เป็น `$gte`, `<=` เป็น `$lte`, `!=` เป็น `$ne` และ `=` เป็นการจับคู่โดยตรง
-
4
คัดลอกผลลัพธ์
บรรทัด `db.collection.find(...)` ที่สร้างขึ้นพร้อมสำหรับวางลงในเชลล์ mongosh หรือการเรียกใช้ไดรเวอร์
ตัวอย่างการใช้งาน
SQL:
SELECT name, price FROM products WHERE price > 100 ORDER BY price DESC LIMIT 5;
คำสั่งของ MongoDB:
db.products.find({ price: { $gt: 100 } }, { name: 1, price: 1 }).sort({ price: -1 }).limit(5)
สิ่งที่ตัวแปลงจับคู่
| SQL | MongoDB find() |
|---|---|
SELECT a, b |
การฉายข้อมูล { a: 1, b: 1 } |
SELECT * |
ทุกฟิลด์ (การฉายข้อมูลว่าง) |
FROM users |
db.users.find(...) |
WHERE a = 5 |
{ a: 5 } |
WHERE a > 5 |
{ a: { $gt: 5 } } |
WHERE a >= 5 |
{ a: { $gte: 5 } } |
WHERE a != 5 |
{ a: { $ne: 5 } } |
WHERE a AND b |
{ a: ..., b: ... } |
WHERE a OR b |
{ $or: [ ... ] } |
ORDER BY a DESC |
.sort({ a: -1 }) |
LIMIT 10 |
.limit(10) |
สิ่งที่ไม่รองรับ
- JOIN อ่านได้เพียงตารางเดียวเท่านั้น การรวมคอลเลกชันต้องใช้
$lookupหรือโมเดลข้อมูลแบบไม่ปรับให้เป็นบรรทัดฐาน ซึ่งเป็นการตัดสินใจเรื่องสคีมา ไม่ใช่การเขียนคำสั่งใหม่ - GROUP BY และการรวมข้อมูล
COUNT,SUM,AVGและGROUP BYต้องใช้ไปป์ไลน์การรวมข้อมูล (db.collection.aggregate([...])) ซึ่งเครื่องมือนี้ไม่ได้สร้างขึ้น - คำค้นย่อย, CTE และฟังก์ชันวินโดว์ ให้ทบทวนโมเดลใหม่หรือแบ่งงานออกเป็นขั้นตอน เพราะไม่สามารถแสดงใน
find()ได้ - IN, LIKE และ BETWEEN ตัวแยกวิเคราะห์
WHEREรองรับเฉพาะตัวดำเนินการเปรียบเทียบ=,>,<,>=,<=,!=และ<>เท่านั้น - การผสม AND กับ OR ประโยค
WHEREจะถูกจัดการเป็นANDทั้งหมดหรือORทั้งหมด อย่าผสมทั้งสองในคำสั่งเดียวกัน - INSERT, UPDATE, DELETE, CREATE TABLE แปลงเฉพาะ
SELECTเท่านั้น
เกี่ยวกับผลลัพธ์
ผลลัพธ์จะเป็นบรรทัดเดียวเสมอ db.collection.find(ตัวกรอง, การฉายข้อมูล) ตามด้วย .sort() และ .limit() ได้ตามต้องการ ผลลัพธ์นี้มุ่งเป้าไปที่เชลล์และไดรเวอร์ของ MongoDB ไม่สร้างคำสั่งของ Firestore หรือ Elasticsearch และไม่เลือกดัชนีหรือปรับประสิทธิภาพ โปรดทดสอบคำสั่งกับข้อมูลของคุณเองก่อนนำไปใช้จริง
คำถามที่พบบ่อย
ไม่ ผลลัพธ์จะเป็นคำสั่ง find() ของ MongoDB สำหรับเชลล์ mongosh หรือไดรเวอร์เสมอ ไม่มีตัวเลือกเป้าหมายสำหรับที่จัดเก็บเอกสารอื่น
ไม่ สิ่งเหล่านั้นต้องใช้ไปป์ไลน์การรวมข้อมูลของ MongoDB (aggregate([...])) ซึ่งเครื่องมือนี้ไม่ได้สร้างขึ้น เครื่องมือนี้สร้างเฉพาะคำสั่ง find() ที่มีตัวกรอง การฉายข้อมูล การเรียงลำดับ และการจำกัดเท่านั้น
ไม่ อ่านได้เพียงตาราง FROM เดียวเท่านั้น ที่จัดเก็บแบบ NoSQL นิยมการฝังหรือการอ้างอิง ดังนั้น JOIN จึงมักหมายถึงการเปลี่ยนโมเดลข้อมูล ไม่ใช่การเขียนคำสั่งใหม่
ไม่ แปลงเฉพาะคำสั่ง SELECT เท่านั้น คอลเลกชันใน MongoDB ไม่มีสคีมาโดยค่าเริ่มต้น จึงไม่มีนิยามตารางให้แปลง
เครื่องมือที่เกี่ยวข้อง
ตารางอ้างอิง ASCII
ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL
อ้างอิงตัวอักษร HTML
รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ
ตารางอ้างอิงแป้นพิมพ์ลัด
ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux
ตัวตรวจสอบความถูกต้องของ JSON
ตรวจสอบไวยากรณ์ JSON และตรวจจับเครื่องหมายจุลภาคต่อท้าย เครื่องหมายอัญประกาศที่ผิด คีย์ซ้ำ และโครงสร้างที่ผิดรูปแบบ พร้อมระบุตำแหน่งข้อผิดพลาดอย่างแม่นยำ
ตัวลดรูปพีชคณิตบูลีน
ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^
เครื่องสร้างตัวอักษรสุ่ม
สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน
เครื่องมือนี้มีให้บริการในภาษาอื่น
- SQL から NoSQL へ [JA]
- SQL a NoSQL [ES]
- SQL till NoSQL [SV]
- Từ SQL sang NoSQL [VI]
- SQL naar NoSQL [NL]
- SQL na NoSQL [PL]
- SQL zu NoSQL [DE]
- SQL para NoSQL [PT]
- Dari SQL ke NoSQL [ID]
- من SQL إلى NoSQL [AR]
- SQL vers NoSQL [FR]
- SQL → NoSQL [KO]
- SQL в NoSQL [RU]
- SQL'den NoSQL'e [TR]
- 从 SQL 到 NoSQL [ZH]
- SQL to NoSQL [EN]
- SQL a NoSQL [IT]