首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MongoDB 與 MySQL 查詢語法對照表:從關係型思維轉型文檔型

     編輯:MySQL 綜合教學

MongoDB 與 MySQL 查詢語法對照表:從關係型思維轉型文檔型

左側 MongoDB 查詢,右側對應 MySQL SQL。涵蓋基礎 CRUD、條件運算子、投影、排序分頁、陣列/嵌套查詢、正則、MapReduce、$where 等進階特性,助關係型開發者快速上手 MongoDB。

基礎查詢對照

MongoDBMySQL說明
db.users.find()SELECT * FROM users全表查詢
db.users.find({"age": 27})SELECT * FROM users WHERE age = 27等值查詢
db.users.find({"username": "joe", "age": 27})SELECT * FROM users WHERE username="joe" AND age=27AND 條件
db.users.find({}, {"username": 1, "email": 1})SELECT username, email FROM users投影 (僅返回指定列)
db.users.find({}, {"username": 1, "_id": 0})SELECT username FROM users排除 _id (MongoDB 默認返回 _id)

比較運算子對照

MongoDBMySQL運算子含義
{"age": {"$gte": 18, "$lte": 30}}WHERE age >= 18 AND age <= 30範圍:$gte≥, $lte≤, $gt>, $lt<
{"username": {"$ne": "joe"}}WHERE username <> "joe"不等於
{"ticket_no": {"$in": [725, 542, 390]}}WHERE ticket_no IN (725, 542, 390)集合包含
{"ticket_no": {"$nin": [725, 542, 390]}}WHERE ticket_no NOT IN (...)集合不包含
{"$or": [{"ticket_no": 725}, {"winner": true}]}WHERE ticket_no=725 OR winner=true邏輯 OR
{"id_num": {"$mod": [5, 1]}}WHERE (id_num % 5) = 1取模運算
{"$not": {"age": 27}}WHERE NOT (age = 27)邏輯非

特殊查詢對照

MongoDBMySQL說明
{"username": {"$in": [null], "$exists": true}}WHERE username IS NULL查 NULL 值 (需加 $exists 排除缺失字段)
{"name": /joey?/i}WHERE name REGEXP 'joey?'正則查詢 (PCRE 兼容)
{"fruit": {"$all": ["apple", "banana"]}}WHERE fruit @> ARRAY['apple','banana'] (PG) / JSON_CONTAINS (MySQL 5.7+)陣列包含所有元素
{"fruit.2": "peach"}WHERE JSON_EXTRACT(fruit, '$[2]') = 'peach'陣列索引訪問 (0-based)
{"fruit": {"$size": 3}}WHERE JSON_LENGTH(fruit) = 3陣列長度
.findOne(criteria, {"comments": {"$slice": 10}})WHERE ... LIMIT 1 + 應用層切片陣列切片 (前 10/後 10/中間)

嵌套/陣列查詢

MongoDBMySQL (JSON)說明
{"name.first": "Joe", "name.last": "Schmoe"}WHERE JSON_EXTRACT(name, '$.first')='Joe' AND JSON_EXTRACT(name, '$.last')='Schmoe'嵌套對象查詢
{"comments": {"$elemMatch": {"author": "joe", "score": {"$gte": 5}}}}WHERE JSON_SEARCH(comments, 'one', 'joe') ... (複雜)陣列元素多條件匹配 (關鍵差異)

進階與分頁

MongoDBMySQL說明
{"$where": "this.x + this.y == 10"}WHERE x + y = 10JS 表達式/函數查詢 (效能極差,慎用)
.find().sort({"x": 1}).limit(1).skip(10)ORDER BY x ASC LIMIT 1 OFFSET 10排序、限制、跳過 (skip 深分頁效能差)

核心差異總結

維度MongoDBMySQL
Schema動態、無結構定義嚴格、DDL 定義
關聯嵌套文檔/引用 (應用層 JOIN)外鍵 + JOIN (引擎層)
事務4.0+ 多文檔 ACID 事務成熟完整事務支援
擴展原生 Sharding (分片鍵)中間件/手動分庫分表
索引單欄/複合/多鍵/地理/文本/TTLB+Tree/Hash/全文/空間
聚合Pipeline (流水線)GROUP BY + 窗口函數

遷移建議

  1. 數據建模: 將「經常一起讀」的數據嵌套為單文檔,避免應用層 JOIN
  2. 查詢模式驅動建模: 先寫查詢,再設計文檔結構
  3. 索引策略: MongoDB 複合索引順序極其重要 (ESR 原則:Equality → Sort → Range)
  4. 避免 $where: 優先用正則 → 聚合管道 → MapReduce,最後才 $where
  5. 分頁優化: 深分頁用 _id 游標分頁替代 skip
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved