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