การแปลง SQL เป็น NoSQL

วางคำสั่ง SQL SELECT หนึ่งคำสั่ง แล้วตัวแปลงจะเขียนใหม่ให้เป็นคำสั่ง find() ของ MongoDB ที่เทียบเท่ากัน โดยจับคู่คอลัมน์ที่เลือกกับการฉายข้อมูล (projection) จับคู่ประโยค WHERE กับตัวกรอง จับคู่ ORDER BY กับ .sort() และจับคู่ LIMIT กับ .limit() นี่คือเครื่องมือเขียนคำสั่งใหม่สำหรับคำสั่งอย่างง่าย ไม่ใช่เครื่องมือย้ายข้อมูล ไม่รองรับ JOIN, GROUP BY, การรวมข้อมูล และคำค้นย่อย

การแปลงทำงานอย่างไร

  1. 1

    แยกวิเคราะห์คำสั่ง SELECT

    เครื่องมือนี้อ่านคำสั่งเดียวในรูปแบบ `SELECT คอลัมน์ FROM ตาราง [WHERE ...] [ORDER BY ...] [LIMIT n]`

  2. 2

    จับคู่แต่ละประโยค

    คอลัมน์กลายเป็นการฉายข้อมูล `{ col: 1 }`, `WHERE` กลายเป็นตัวกรอง, `ORDER BY` กลายเป็น `.sort()` และ `LIMIT` กลายเป็น `.limit()`

  3. 3

    แปลตัวดำเนินการ

    ตัวดำเนินการเปรียบเทียบถูกจับคู่กับตัวดำเนินการของ Mongo: `>` เป็น `$gt`, `<` เป็น `$lt`, `>=` เป็น `$gte`, `<=` เป็น `$lte`, `!=` เป็น `$ne` และ `=` เป็นการจับคู่โดยตรง

  4. 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 แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือนี้มีให้บริการในภาษาอื่น