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