SQL 到 MongoDB 的 Map 图

在本页面

除了下面的图表,您可能还需要考虑经常问的问题部分,以选择有关 MongoDB 的常见问题。

术语和概念

下表介绍了各种 SQL 术语和概念以及相应的 MongoDB 术语和概念。

SQL Terms/ConceptsMongoDB Terms/Concepts
databasedatabase
tablecollection
rowdocumentBSON文档
columnfield
indexindex
table joins$lookup,嵌入式文档
primary key


指定任何唯一的列或列组合作为主键。 primary key
在 MongoDB 中,主键自动设置为_id字段。
|聚合(例如,分组依据)|聚合管道
参见SQL 到聚合的 Map 图

Executables

下表显示了一些数据库可执行文件和相应的 MongoDB 可执行文件。 此表不是*意在穷举。

MongoDBMySQLOracleInformixDB2
Database ServermongodmysqldoracleIDSDB2 Server
Database ClientmongomysqlsqlplusDB-AccessDB2 Client

Examples

下表显示了各种 SQL 语句和相应的 MongoDB 语句。表格中的示例假定以下条件:

  • SQL 示例假定一个名为people的表。

  • MongoDB 示例假定一个名为people的集合,其中包含以下原型的文档:

{
  _id: ObjectId("509a8fb2f3f4948bd2f983a0"),
  user_id: "abc123",
  age: 55,
  status: 'A'
}

创建和更改

下表列出了与表级操作有关的各种 SQL 语句以及相应的 MongoDB 语句。

SQL 模式语句MongoDB 架构语句
创建表人(

id MEDIUMINT 不是 NULL
AUTO_INCREMENT,
user_id Varchar(30),
age Number,
status char(1),
主键(id)
)
在第一个insertOne()insertMany()操作上隐式创建。如果未指定_id字段,则会自动添加主键_id
db.people.insertOne( {
user_id: "abc123",
age: 55,
status: "A"
} )
但是,您也可以显式创建一个集合:
db.createCollection("people")
ALTER TABLE 人
ADD join_date DATETIME
集合不描述也不强制其文档结构;即在收集级别没有结构上的更改。
但是,在文档级别,updateMany()操作可以使用$set运算符将字段添加到现有文档中。
db.people.updateMany(
{ },
{ $set: { join_date: new Date() } }
)
ALTER TABLE 人
DROP COLUMN join_date
集合不描述或强制执行其文档的结构;即在收集级别没有结构上的更改。
但是,在文档级别,updateMany()操作可以使用$unset运算符从文档中删除字段。
db.people.updateMany(
{ },
{ $unset: { "join_date": "" } }
)
创建索引 idx_user_id_asc
ON people(user_id)
db.people.createIndex( { user_id: 1 } )
CREATE INDEX
idx_user_id_asc_age_desc
开启人员(user_id,年龄 DESC)
db.people.createIndex( { user_id: 1, age: -1 } )
DROP TABLE peopledb.people.drop()

有关使用的方法和运算符的更多信息,请参见:

db.collection.insertOne()

db.collection.insertMany()
db.createCollection()
db.collection.updateMany()
db.collection.createIndex()
db.collection.drop()
$set
$unset

Insert

下表显示了与将记录插入表和相应的 MongoDB 语句有关的各种 SQL 语句。

SQL INSERT 语句MongoDB insertOne()语句
INSERT INTO people(user_id,

age,
status)
VALUES ("bcd001",
45,
"A")
db.people.insertOne(
{ user_id: "bcd001", age: 45, status: "A" }
)

有关更多信息,请参见db.collection.insertOne()

Select

下表显示了与从表中读取记录和相应的 MongoDB 语句相关的各种 SQL 语句。

Note

find()方法始终在返回的文档中包含_id字段,除非通过projection特别排除。即使某些字段不包含在相应的find()查询中,下面的某些 SQL 查询也可能包含_id字段来反映这一点。

SQL SELECT 语句MongoDB find()语句
SELECT *

FROM people
db.people.find()
SELECT id,
user_id,
status
FROM people
db.people.find(
{ },
{ user_id: 1, status: 1 }
)
SELECT user_id,状态
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,状态
FROM people
WHERE status =“ A”
db.people.find(
{ status: "A" },
{ user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE 状态!=“ A”
db.people.find(
{ status: { $ne: "A" } }
)
SELECT *
FROM people
状态为“ A”
AND 年龄= 50
db.people.find(
{状态:“ A”,
年龄:50}
)
SELECT *
FROM people
状态为“ A”
或年龄= 50
db.people.find(
{ $or: [ { status: "A" } , { age: 50 }] }
)
SELECT *
FROM people
年龄> 25
db.people.find(
{ age: { $gt: 25 } }
)
SELECT *
FROM people
年龄<25
db.people.find(
{ age: { $lt: 25 } }
)
SELECT *
FROM people
年龄> 25
AND 年龄<= 50
db.people.find(
{ age: { $gt: 25, $lte: 50 } }
)
SELECT *
FROM people
其中 user_id 如“%bc%”
db.people.find( { user_id: /bc/ } )
-or-
db.people.find( { user_id: { $regex: /bc/ } } )
SELECT *
FROM people
其中的 user_id 如“ bc%”
db.people.find( { user_id: /^bc/ } )
-or-
db.people.find( { user_id: { $regex: /^bc/ } } )
SELECT *
FROM people
状态为“ A”
ORDER BY user_id ASC
db.people.find( { status: "A" } ).sort( { user_id: 1 } )
SELECT *
FROM people
状态为“ 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
年龄> 30 岁
db.people.count( { age: { $gt: 30 } } )
or
db.people.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)
FROM people
db.people.aggregate( [ { $group : { _id : "$status" } } ] )
或者,对于不超过BSON 大小限制的不同值集
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
状态=“ A”
db.people.find( { status: "A" } ).explain()

有关使用的方法和运算符的更多信息,请参见

db.collection.find()

db.collection.distinct()
db.collection.findOne()
limit()
skip()
explain()
sort()
count()
$ne
$and
$or
$gt
$lt
$exists
$lte
$regex

Update Records

下表显示了与更新表中的现有记录有关的各种 SQL 语句以及相应的 MongoDB 语句。

SQL 更新语句MongoDB updateMany()语句
UPDATE people

SET 状态=“ C”
年龄> 25
db.people.updateMany(
{ age: { $gt: 25 } },
{ $set: { status: "C" } }
)
UPDATE people
设定年龄= 3 岁
WHERE status =“ A”
db.people.updateMany(
{ status: "A" } ,
{ $inc: { age: 3 } }
)

有关示例中使用的方法和运算符的更多信息,请参见:

db.collection.updateMany()

$gt
$set
$inc

Delete Records

下表显示了与从表中删除记录和相应的 MongoDB 语句有关的各种 SQL 语句。

SQL 删除语句MongoDB deleteMany()语句
从人中删除

状态=“ D”
db.people.deleteMany( { status: "D" } )
DELETE FROM peopledb.people.deleteMany({})

有关更多信息,请参见db.collection.deleteMany()