MongoDB学习第七篇 --- sql和mongodb对比

一、术语和概念的对比

SQLMongoDB
databasedatabase
  
rowdocument or BSON document
columnfield
indexindex
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

 

 

 

二、对库和表的操作语句对比

SQLMongoDB
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 StatementsMongoDB 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 StatementsMongoDB 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 StatementsMongoDB 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 StatementsMongoDB deleteMany() Statements
DELETE FROM people
WHERE status = "D" 
db.people.deleteMany( { status: "D" } ) 
DELETE FROM people
db.people.deleteMany({})

 

转载于:https://www.cnblogs.com/malcolmfeng/p/6937517.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值