Từ SQL sang NoSQL
Dán một câu lệnh SQL SELECT và công cụ chuyển đổi sẽ viết lại thành một truy vấn find() tương đương của MongoDB. Nó ánh xạ các cột được chọn thành một phép chiếu, mệnh đề WHERE thành một bộ lọc, ORDER BY thành .sort() và LIMIT thành .limit(). Đây là công cụ viết lại truy vấn cho các câu lệnh đơn giản, không phải công cụ di chuyển dữ liệu: JOIN, GROUP BY, các phép tổng hợp và truy vấn con không được hỗ trợ.
Cách hoạt động của việc chuyển đổi
-
1
Phân tích câu SELECT
Công cụ đọc một câu lệnh duy nhất theo dạng `SELECT các_cột FROM bảng [WHERE ...] [ORDER BY ...] [LIMIT n]`.
-
2
Ánh xạ từng mệnh đề
Các cột trở thành một phép chiếu `{ col: 1 }`, `WHERE` trở thành một bộ lọc, `ORDER BY` trở thành `.sort()` và `LIMIT` trở thành `.limit()`.
-
3
Dịch các toán tử
Các toán tử so sánh được ánh xạ sang toán tử Mongo: `>` sang `$gt`, `<` sang `$lt`, `>=` sang `$gte`, `<=` sang `$lte`, `!=` sang `$ne`, và `=` sang một phép khớp trực tiếp.
-
4
Sao chép kết quả
Dòng `db.collection.find(...)` được tạo ra đã sẵn sàng để dán vào shell mongosh hoặc một lời gọi driver.
Một ví dụ thực tế
SQL:
SELECT name, price FROM products WHERE price > 100 ORDER BY price DESC LIMIT 5;
Truy vấn MongoDB:
db.products.find({ price: { $gt: 100 } }, { name: 1, price: 1 }).sort({ price: -1 }).limit(5)
Những gì công cụ ánh xạ
| SQL | MongoDB find() |
|---|---|
SELECT a, b |
phép chiếu { a: 1, b: 1 } |
SELECT * |
tất cả các trường (phép chiếu rỗng) |
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) |
Những gì không được hỗ trợ
- JOIN. Chỉ một bảng duy nhất được đọc. Kết hợp các collection cần
$lookuphoặc một mô hình dữ liệu phi chuẩn hóa, đó là một quyết định về lược đồ, không phải việc viết lại truy vấn. - GROUP BY và các phép tổng hợp.
COUNT,SUM,AVGvàGROUP BYcần đến pipeline tổng hợp (db.collection.aggregate([...])), thứ mà công cụ này không tạo ra. - Truy vấn con, CTE và hàm cửa sổ. Hãy xem lại mô hình hoặc chia công việc thành nhiều giai đoạn; chúng không thể biểu diễn trong một
find(). - IN, LIKE và BETWEEN. Bộ phân tích
WHEREchỉ xử lý các toán tử so sánh=,>,<,>=,<=,!=và<>. - Trộn lẫn AND và OR. Một mệnh đề
WHEREđược xử lý toàn bộ làANDhoặc toàn bộ làOR; đừng kết hợp cả hai trong cùng một câu lệnh. - INSERT, UPDATE, DELETE, CREATE TABLE. Chỉ
SELECTđược chuyển đổi.
Về kết quả đầu ra
Kết quả luôn là một dòng duy nhất db.collection.find(bộ_lọc, phép_chiếu), có thể theo sau bởi .sort() và .limit(). Nó nhắm đến shell và các driver của MongoDB. Nó không tạo ra truy vấn Firestore hay Elasticsearch, và không chọn chỉ mục hay tối ưu hóa hiệu năng. Hãy kiểm thử truy vấn trên dữ liệu của bạn trước khi tin dùng.
Câu hỏi thường gặp
Không. Kết quả luôn là một truy vấn find() của MongoDB cho shell mongosh hoặc một driver. Không có bộ chọn đích cho các kho lưu trữ tài liệu khác.
Không. Những thứ đó cần pipeline tổng hợp của MongoDB (aggregate([...])), thứ mà công cụ này không tạo ra. Nó chỉ tạo truy vấn find() với bộ lọc, phép chiếu, sắp xếp và giới hạn.
Không. Chỉ một bảng FROM duy nhất được đọc. Các kho NoSQL ưu tiên nhúng hoặc tham chiếu, nên một JOIN thường có nghĩa là thay đổi mô hình dữ liệu, không phải viết lại truy vấn.
Không. Chỉ các câu lệnh SELECT được chuyển đổi. Các collection trong MongoDB mặc định không có lược đồ, nên không có định nghĩa bảng nào để dịch.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bảng tham khảo phím tắt
Tìm phím tắt mặc định theo tài liệu của VS Code, Chrome và Bash dùng GNU Readline trên macOS, Windows và Linux.
Trình giải mã mã JavaScript (JavaScript Deobfuscator)
Giải mã mã JavaScript đã được rút gọn hoặc nén bằng cách đổi tên biến, giải mã chuỗi và mảng, đảo ngược cấu trúc dòng điều khiển và làm đẹp mã.
Chuyển đổi HTML sang BBCode
Chuyển đổi các đoạn mã HTML thành BBCode dành cho phpBB, vBulletin và các phần mềm diễn đàn khác không hỗ trợ định dạng HTML thô.
Trình chuyển ASCII sang Hex
Biến văn bản ASCII thành giá trị byte thập lục phân. Đầu ra dùng hai chữ số hex cho mỗi ký tự, sẵn sàng cho memory dump, packet trace hoặc bảng firmware.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- Dari SQL ke NoSQL [ID]
- SQL zu NoSQL [DE]
- SQL a NoSQL [ES]
- การแปลง SQL เป็น NoSQL [TH]
- SQL から NoSQL へ [JA]
- SQL na NoSQL [PL]
- من SQL إلى NoSQL [AR]
- SQL vers NoSQL [FR]
- SQL para NoSQL [PT]
- SQL → NoSQL [KO]
- SQL till NoSQL [SV]
- SQL naar NoSQL [NL]
- SQL to NoSQL [EN]
- SQL a NoSQL [IT]
- SQL в NoSQL [RU]
- SQL'den NoSQL'e [TR]
- 从 SQL 到 NoSQL [ZH]