SQL 到 MongoDB 映射

2024 年 9 月 6 日 | 阅读 4 分钟

下表展示了各种 SQL 术语和概念,它们与 MongoDB 术语和概念类似。

SQL 术语MongoDB 术语
数据库数据库
集合
文档或 BSON 文档
字段
索引索引
表连接$lookup, 嵌入式文档
主键主键
在 SQL 中,我们可以指定任何唯一的列或列组合作为主键。在 MongoDB 中,我们不需要设置主键。 _id 字段将自动设置为主键。
聚合聚合管道
SELECT INTO NEW_TABLE$out
MERGE INTO TABLE$merge
事务事务

下面的示例代表了各种 SQL 语句和类似的 MongoDB 语句。

表中的示例假设以下条件

  • SQL 示例假设表名为 JavaTpoint
  • MongoDB 示例假设名为 JavaTpoint 的集合包含以下原型文档

创建和更改命令

SQL 语句MongoDB 语句
CREATE TABLE JavaTpoint (
    id MEDIUMINT NOT NULL
        AUTO_INCREMENT,
    user_id Varchar(20),
    age Number,
    status char(1),
    PRIMARY KEY (id)
)
db.createCollection ( " JavaTpoint " )
ALTER TABLE JavaTpoint ADD join_date DATETIME
db.JavaTpoint.updateMany(
    { },
    { $set: { join_date: new Date() } }
)
ALTER TABLE JavaTpoint DROP COLUMN join_date
db.JavaTpoint.updateMany(
    { },
    { $unset: { "join_date": "" } }
)
CREATE INDEX idx_user_id_asc ON JavaTpoint ( user_id )
db.people.createIndex ( { user_id: 1 } )
CREATE INDEX idx_user_id_asc ON people (user_id)
db.people.createIndex( { user_id: 123, age: 1} )
DROP TABLE people
db.people.drop ()

MongoDB 和 SQL 插入语句

SQL 插入语句MongoDB 插入语句
INSERT INTO JavaTpoint (user_id,
                  age,
                  status)
VALUES ("mongo",
        45,
        "A")
db.JavaTpoint.insertOne(
   { user_id: "mongo", age: 18, status: "A" }
)

SQL 和 Mongo DB 选择命令

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

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

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

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

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

db. JavaTPoint.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)
FROM JavaTPoint
db. JavaTPoint.aggregate( [ { $group : { _id : "$status" } } ] )
or, for distinct value sets that do not exceed the BSON size limit

db. JavaTPoint.distinct( "status" )
SELECT *
FROM JavaTPoint
LIMIT 1
db. JavaTPoint.findOne()
or

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

SQL 和 MongoDB 更新语句

SQL 更新语句MongoDB updateMany() 语句
UPDATE JavaTpoint SET status = "C"
WHERE age > 25
db.JavaTpoint.updateMany( { age: { $gt: 25 } }, { $set: { status: "C" } } )
UPDATE JavaTpoint SET age = age + 3
WHERE status = "A"
db.JavaTpoint.updateMany( { status: "A" } , { $inc: { age: 3 } } )

SQL 和 MongoDB 删除语句

SQL 删除语句MongoDB deleteMany() 语句
DELETE FROM JavaTpoint WHERE status = "D"
db.JavaTpoint.deleteMany( { status: "D" } )
DELETE FROM JavaTpoint
db.JavaTpoint.deleteMany( { } )