由於新專案採用了 Node.js 開發且使用 MongoDB 作為儲存媒介,所以動手翻譯了官方文件方便查閱相關指令用法。
術語和概念(Terminology and Concepts)
下表列出了各種 SQL 和相應的 MongoDB 的術語和概念。
SQL 術語/概念 | MongoDB 術語/概念 |
---|---|
資料庫(database) | 資料庫(database) |
資料表(table) | 集合(collection) |
資料列(row) | 文件(document) 或 BSON 文件 |
資料行(column) | 欄位(field) |
索引(index) | 索引(index) |
資料表連結(table joins) | 嵌入式文件及連結(embedded documents and linking) |
主索引鍵(primary key) 指定任意一個或多個欄位組合為主索引鍵,資料內容須唯一不可重複。 |
主索引鍵(primary key) 在 MongoDB,主索引鍵會自動設定到 _id 欄位。 |
彙總(aggregation),例如:group by | 彙總管線(aggregation pipeline) 參閱 SQL 至彙總(Aggregation)對應表. |
可執行檔案(Executables)
下表列出了 MySQL / Oracle 可執行檔案和相應的 MongoDB 的可執行檔案。
MySQL / Oracle | MongoDB | |
---|---|---|
資料庫伺服器(Database Server) | mysqld / oracle | mongod |
資料庫用戶端(Database Client) | mysql / sqlplus | mongo |
範例(Examples)
下表列出了各種 SQL 語句和相應的 MongoDB 語句。在表格中的範例假定有下列條件:
SQL 範例假設是名為 users 的資料表
MongoDB 範例假設是名為 users 的集合,包含的文件原型如下:
{ _id: ObjectID("509a8fb2f3f4948bd2f983a0"), user_id: "abc123", age: 55, status: 'A' }
建立及修改資料表(Create and Alter)
下面列出了關於資料表層級操作的各種 SQL 語句和相應的 MongoDB 語句。
SQL 架構語句
CREATE TABLE users ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) )
MongoDB 架構語句
在第一次插入資料操作時透過隱含方式建立。若未指定 _id 欄位,則會自動建立主索引鍵 _id。db.users.insert( { user_id: "abc123", age: 55, status: "A" } )
然而,你也可以明確地建立一個集合:
db.createCollection("users")
參閱 insert() 和 db.createCollection() 取得更多資訊。
SQL 架構語句
ALTER TABLE users ADD join_date DATETIME
MongoDB 架構語句
集合不描述或強制其文件結構,即在集合層級沒有結構上的改變。
然而,在文件層級,update() 操作可以透過 $set 運算元加入欄位到已存在的文件。db.users.update( { }, { $set: { join_date: new Date() } }, { multi: true } )
參閱 Data Modeling Concepts、update() 及 $set 取得更多改變集合中文件結構的更多資訊。
SQL 架構語句
ALTER TABLE users DROP COLUMN join_date
MongoDB 架構語句
集合不描述或強制其文件結構,即在集合層級中沒有結構上的改變。
然而,在文件層級,update() 操作可以透過 $unset 運算元從文件移除欄位。db.users.update( { }, { $unset: { join_date: "" } }, { multi: true } )
參閱 Data Modeling Concepts、update() 及 $unset 取得更多改變集合中文件結構的更多資訊。
SQL 架構語句
CREATE INDEX idx_user_id_asc ON users(user_id)
MongoDB 架構語句
db.users.ensureIndex( { user_id: 1 } )
參閱 ensureIndex() 及 indexes 取得更多資訊。
SQL 架構語句
CREATE INDEX idx_user_id_asc_age_desc ON users(user_id, age DESC)
MongoDB 架構語句
db.users.ensureIndex( { user_id: 1, age: -1 } )
參閱 ensureIndex() 及 indexes 取得更多資訊。
SQL 架構語句
DROP TABLE users
MongoDB 架構語句
db.users.drop()
參閱 drop() 取得更多資訊。
插入(Insert)
下面列出了關於插入資料到資料表的各種 SQL 語句和相應的 MongoDB 語句。
SQL 架構語句
INSERT INTO users( user_id, age, status) VALUES ( "bcd001", 45, "A")
MongoDB 架構語句
db.users.insert( { user_id: "bcd001", age: 45, status: "A" } )
參閱 insert() 取得更多資訊。
選擇(Select)
下面列出了關於從資料表讀取資料的各種 SQL 語句和相應的 MongoDB 語句。
SQL 架構語句
SELECT * FROM users
MongoDB 架構語句
db.users.find()
參閱 find() 取得更多資訊。
SQL 架構語句
SELECT id, user_id, status FROM users
MongoDB 架構語句
db.users.find( { }, { user_id: 1, status: 1 } )
參閱 find() 取得更多資訊。
SQL 架構語句
SELECT user_id, status FROM users
MongoDB 架構語句
db.users.find( { }, { user_id: 1, status: 1, _id: 0 } )
參閱 find() 取得更多資訊。
SQL 架構語句
SELECT * FROM users WHERE status = "A"
MongoDB 架構語句
db.users.find( { status: "A" } )
參閱 find() 取得更多資訊。
SQL 架構語句
SELECT user_id, status FROM users WHERE status = "A"
MongoDB 架構語句
db.users.find( { status: "A" }, { user_id: 1, status: 1, _id: 0 } )
參閱 find() 取得更多資訊。
SQL 架構語句
SELECT * FROM users WHERE status != "A"
MongoDB 架構語句
db.users.find( { status: { $ne: "A" } } )
SQL 架構語句
SELECT * FROM users WHERE status = "A" AND age = 50
MongoDB 架構語句
db.users.find( { status: "A", age: 50 } )
SQL 架構語句
SELECT * FROM users WHERE status = "A" OR age = 50
MongoDB 架構語句
db.users.find( { $or: [ { status: "A" } , { age: 50 } ] } )
SQL 架構語句
SELECT * FROM users WHERE age > 25
MongoDB 架構語句
db.users.find( { age: { $gt: 25 } } )
SQL 架構語句
SELECT * FROM users WHERE age < 25
MongoDB 架構語句
db.users.find( { age: { $lt: 25 } } )
SQL 架構語句
SELECT * FROM users WHERE age > 25 AND age <= 50
MongoDB 架構語句
db.users.find( { age: { $gt: 25, $lte: 50 } } )
SQL 架構語句
SELECT * FROM users WHERE user_id like "%bc%"
MongoDB 架構語句
db.users.find( { user_id: /bc/ } )
SQL 架構語句
SELECT * FROM users WHERE user_id like "bc%"
MongoDB 架構語句
db.users.find( { user_id: /^bc/ } )
SQL 架構語句
SELECT * FROM users WHERE status = "A" ORDER BY user_id ASC
MongoDB 架構語句
db.users.find( { status: "A" } ).sort( { user_id: 1 } )
SQL 架構語句
SELECT * FROM users WHERE status = "A" ORDER BY user_id DESC
MongoDB 架構語句
db.users.find( { status: "A" } ).sort( { user_id: -1 } )
SQL 架構語句
SELECT COUNT(*) FROM users
MongoDB 架構語句
db.users.count()
或
db.users.find().count()
SQL 架構語句
SELECT COUNT(user_id) FROM users
MongoDB 架構語句
db.users.count( { user_id: { $exists: true } } )
或
db.users.find( { user_id: { $exists: true } } ).count()
SQL 架構語句
SELECT COUNT(*) FROM users WHERE age > 30
MongoDB 架構語句
db.users.count( { age: { $gt: 30 } } )
或
db.users.find( { age: { $gt: 30 } } ).count()
SQL 架構語句
SELECT DISTINCT(status) FROM users
MongoDB 架構語句
db.users.distinct( "status" )
參閱 find() 及 distinct() 取得更多資訊。
SQL 架構語句
SELECT * FROM users LIMIT 1
MongoDB 架構語句
db.users.findOne()
或
db.users.find().limit(1)
SQL 架構語句
SELECT * FROM users LIMIT 5 SKIP 10
MongoDB 架構語句
db.users.find().limit(5).skip(10)
SQL 架構語句
EXPLAIN SELECT * FROM users WHERE status = "A"
MongoDB 架構語句
db.users.find( { status: "A" } ).explain()
修改資料(Update Records)
下面列出了關於修改現有資料表內資料的各種 SQL 語句和相應的 MongoDB 語句。
SQL 架構語句
UPDATE users SET status = "C" WHERE age > 25
MongoDB 架構語句
db.users.update( { age: { $gt: 25 } }, { $set: { status: "C" } }, { multi: true } )
SQL 架構語句
UPDATE users SET age = age + 3 WHERE status = "A"
MongoDB 架構語句
db.users.update( { status: "A" } , { $inc: { age: 3 } }, { multi: true } )
刪除資料(Delete Records)
下面列出了關於從資料表刪除資料的各種 SQL 語句和相應的 MongoDB 語句。
SQL 架構語句
DELETE FROM users WHERE status = "D"
MongoDB 架構語句
db.users.remove( { status: "D" } )
參閱 remove() 取得更多資訊。
SQL 架構語句
DELETE FROM users
MongoDB 架構語句
db.users.remove( )
參閱 remove() 取得更多資訊。