跳到主要内容

MongoDB 语句

常用数据类型

类型说明
String字符串
Integer整数
Double双精度浮点数
Boolean布尔值
Date日期
Null空值
Array数组
Object嵌套对象
ObjectId文档唯一 ID

数据库操作

查看当前数据库

db

查看所有数据库

show dbs

切换数据库

use <database_name>

数据库不存在时会自动创建,但只有插入数据后才会出现在 show dbs 中。

删除当前数据库

db.dropDatabase()

返回:

{
"dropped": "<database_name>",
"ok": 1
}

集合(Collection)操作

查看所有集合

show collections

创建集合

db.createCollection("<collection_name>")

返回:

{
"ok": 1
}

删除集合

db.<collection_name>.drop()

创建固定大小集合(Capped Collection)

按容量限制:

db.createCollection(
"logs",
{
capped: true,
size: 100000
}
)

按文档数量限制:

db.createCollection(
"logs",
{
capped: true,
size: 100000,
max: 1000
}
)

文档(Document)操作

插入单条数据

db.students.insertOne({
name: "Spongebob",
age: 30,
gpa: 3.5
})

插入多条数据

db.students.insertMany([
{
name: "Patrick",
age: 38,
gpa: 3.0
},
{
name: "Sandy",
age: 27,
gpa: 3.8
}
])

集合不存在时会自动创建。

查询(Read)

查询所有文档

db.students.find()

美化输出

db.students.find().pretty()

查询一条文档

db.students.findOne()

条件查询

db.students.find({
name: "Spongebob"
})

返回指定字段

db.students.find(
{},
{
name: 1,
age: 1
}
)

排除 _id

db.students.find(
{},
{
name: 1,
age: 1,
_id: 0
}
)

排序、分页

排序

升序:

db.students.find().sort({
name: 1
})

降序:

db.students.find().sort({
name: -1
})

限制返回数量

db.students.find().limit(10)

跳过指定数量(分页)

db.students.find().skip(20)

分页查询

第 3 页,每页 10 条:

db.students.find()
.skip(20)
.limit(10)

排序 + 分页

db.students.find()
.sort({ age: -1 })
.skip(20)
.limit(10)

更新(Update)

更新单条文档

db.students.updateOne(
{
name: "Spongebob"
},
{
$set: {
fullTime: true
}
}
)

更新多条文档

db.students.updateMany(
{},
{
$set: {
fullTime: false
}
}
)

更新不存在字段

db.students.updateMany(
{
fullTime: {
$exists: false
}
},
{
$set: {
fullTime: true
}
}
)

删除字段

db.students.updateOne(
{
name: "Spongebob"
},
{
$unset: {
fullTime: ""
}
}
)

自增字段

db.students.updateOne(
{
name: "Spongebob"
},
{
$inc: {
age: 1
}
}
)

删除(Delete)

删除一条文档

db.students.deleteOne({
name: "Patrick"
})

删除多条文档

db.students.deleteMany({
fullTime: false
})

删除全部文档

db.students.deleteMany({})

不删除集合,仅清空数据。

统计

统计文档数量

db.students.countDocuments()

条件统计

db.students.countDocuments({
fullTime: true
})

查看集合大小

db.students.stats()

比较运算符

运算符说明
$eq等于
$ne不等于
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$in在指定数组中
$nin不在指定数组中
$exists字段是否存在

示例

年龄大于 25:

db.students.find({
age: {
$gt: 25
}
})

年龄在 20~30:

db.students.find({
age: {
$gte: 20,
$lte: 30
}
})

逻辑运算符

运算符说明
$and
$or
$not
$nor非或

AND

db.students.find({
$and: [
{ age: { $gte: 20 } },
{ fullTime: true }
]
})

OR

db.students.find({
$or: [
{ age: 18 },
{ age: 30 }
]
})

数组查询

包含指定值

db.students.find({
hobbies: "game"
})

包含多个值

db.students.find({
hobbies: {
$all: ["game", "music"]
}
})

数组长度

db.students.find({
hobbies: {
$size: 3
}
})

索引(Index)

创建升序索引

db.students.createIndex({
name: 1
})

创建降序索引

db.students.createIndex({
name: -1
})

创建联合索引

db.students.createIndex({
age: 1,
name: 1
})

查看索引

db.students.getIndexes()

删除索引

db.students.dropIndex({
name: 1
})

删除所有索引

db.students.dropIndexes()

查看执行计划

检查是否命中索引

db.students.find({
name: "Spongebob"
}).explain("executionStats")

重点关注:

类型说明
IXSCAN使用索引
COLLSCAN全表扫描

Mongo Shell 常用命令

查看当前数据库:

db

查看 MongoDB 版本:

db.version()

查看当前连接信息:

db.getMongo()

查看集合状态:

db.students.stats()

查看数据库状态:

db.stats()

退出 Shell:

exit