MongoDB學習第七篇 --- sql和mongodb對比


一、術語和概念的對比

SQL MongoDB
database database
   
row document or BSON document
column field
index index
table joins $lookup, embedded documents

primary key

Specify any unique column or column combination as primary key.

primary key

In MongoDB, the primary key is automatically set to the _id field.

aggregation (e.g. group by)

aggregation pipeline

 

 

 

二、對庫和表的操作語句對比

SQL MongoDB
CREATE TABLE people ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) ) 

 直接執行insert操作即可,如果表不存在,自動創建

db.people.insertOne( {  user_id: "abc123",  age: 55,  status: "A"  } ) 

 也可以用一下語句創建collection

db.createCollection("people") 
ALTER TABLE people ADD join_date DATETIME 
db.people.updateMany(  { },  { $set: { join_date: new Date() } } ) 
ALTER TABLE people DROP COLUMN join_date 
db.people.updateMany(  { },  { $unset: { "join_date": "" } } ) 
CREATE INDEX idx_user_id_asc ON people(user_id) 
db.people.createIndex( { user_id: 1 } ) 
CREATE INDEX idx_user_id_asc_age_desc ON people(user_id, age DESC) 
db.people.createIndex( { user_id: 1, age: -1 } ) 
DROP TABLE people 
db.people.drop()

 

三、insert語句的對比

SQL INSERT Statements MongoDB insertOne() Statements
INSERT INTO people(user_id, age, status) VALUES ("bcd001", 45, "A") 
db.people.insertOne( { user_id: "bcd001", age: 45, status: "A" } )

 

四、select語句的對比

SQL SELECT Statements MongoDB find() Statements
SELECT * FROM people 
db.people.find() 
SELECT id, user_id, status FROM people 
db.people.find(  { },  { user_id: 1, status: 1 } ) 
SELECT user_id, status FROM people 
db.people.find(  { },  { user_id: 1, status: 1, _id: 0 } ) 
SELECT * FROM people WHERE status = "A" 
db.people.find(  { status: "A" } ) 
SELECT user_id, status FROM people WHERE status = "A" 
db.people.find(  { status: "A" },  { user_id: 1, status: 1, _id: 0 } ) 
SELECT * FROM people WHERE status != "A" 
db.people.find(  { status: { $ne: "A" } } ) 
SELECT * FROM people WHERE status = "A" AND age = 50 
db.people.find(  { status: "A",  age: 50 } ) 
SELECT * FROM people WHERE status = "A" OR age = 50 
db.people.find(  { $or: [ { status: "A" } ,  { age: 50 } ] } ) 
SELECT * FROM people WHERE age > 25 
db.people.find(  { age: { $gt: 25 } } ) 
SELECT * FROM people WHERE age < 25 
db.people.find(  { age: { $lt: 25 } } ) 
SELECT * FROM people WHERE age > 25 AND age <= 50 
db.people.find(  { age: { $gt: 25, $lte: 50 } } ) 
SELECT * FROM people WHERE user_id like "%bc%" 
db.people.find( { user_id: /bc/ } ) 

-or-

db.people.find( { user_id: { $regex: /bc/ } } ) 
SELECT * FROM people WHERE user_id like "bc%" 
db.people.find( { user_id: /^bc/ } ) 

-or-

db.people.find( { user_id: { $regex: /^bc/ } } ) 
SELECT * FROM people WHERE status = "A" ORDER BY user_id ASC 
db.people.find( { status: "A" } ).sort( { user_id: 1 } ) 
SELECT * FROM people WHERE status = "A" ORDER BY user_id DESC 
db.people.find( { status: "A" } ).sort( { user_id: -1 } ) 
SELECT COUNT(*) FROM people 
db.people.count() 

or

db.people.find().count() 
SELECT COUNT(user_id) FROM people 
db.people.count( { user_id: { $exists: true } } ) 

or

db.people.find( { user_id: { $exists: true } } ).count() 
SELECT COUNT(*) FROM people WHERE age > 30 
db.people.count( { age: { $gt: 30 } } ) 

or

db.people.find( { age: { $gt: 30 } } ).count() 
SELECT DISTINCT(status) FROM people 
db.people.distinct( "status" ) 
SELECT * FROM people LIMIT 1 
db.people.findOne() 

or

db.people.find().limit(1) 
SELECT * FROM people LIMIT 5 SKIP 10 
db.people.find().limit(5).skip(10) 
EXPLAIN SELECT * FROM people WHERE status = "A" 
db.people.find( { status: "A" } ).explain()

 

五、update語句的對比

SQL Update Statements MongoDB updateMany() Statements
UPDATE people SET status = "C" WHERE age > 25 
db.people.updateMany(  { age: { $gt: 25 } },  { $set: { status: "C" } } ) 
UPDATE people SET age = age + 3 WHERE status = "A" 
db.people.updateMany(  { status: "A" } ,  { $inc: { age: 3 } } )

 

 

六、delete語句的對比

SQL Delete Statements MongoDB deleteMany() Statements
DELETE FROM people WHERE status = "D" 
db.people.deleteMany( { status: "D" } ) 
DELETE FROM people 
db.people.deleteMany({})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM