SQL 到 MongoDB 的 Map 图
在本页面
除了下面的图表,您可能还需要考虑经常问的问题部分,以选择有关 MongoDB 的常见问题。
术语和概念
下表介绍了各种 SQL 术语和概念以及相应的 MongoDB 术语和概念。
SQL Terms/Concepts | MongoDB Terms/Concepts |
---|---|
database | database |
table | collection |
row | document或BSON文档 |
column | field |
index | index |
table joins | $lookup,嵌入式文档 |
primary key |
指定任何唯一的列或列组合作为主键。 primary key
在 MongoDB 中,主键自动设置为_id字段。
|聚合(例如,分组依据)|聚合管道
参见SQL 到聚合的 Map 图。
Executables
下表显示了一些数据库可执行文件和相应的 MongoDB 可执行文件。 此表不是*意在穷举。
MongoDB | MySQL | Oracle | Informix | DB2 | |
---|---|---|---|---|---|
Database Server | mongod | mysqld | oracle | IDS | DB2 Server |
Database Client | mongo | mysql | sqlplus | DB-Access | DB2 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 people | db.people.drop() |
有关使用的方法和运算符的更多信息,请参见:
db.collection.insertOne() | ||
db.collection.insertMany() db.createCollection() | db.collection.updateMany() db.collection.createIndex() db.collection.drop() | $set $unset |
See also
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 |
See also
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 people | db.people.deleteMany({}) |
有关更多信息,请参见db.collection.deleteMany()。