Amazon DocumentDB 基础语法 #
一、Mongo Shell基础 #
1.1 启动Shell #
bash
# 基本连接
mongo --host my-cluster.cluster-abc123.us-east-1.docdb.amazonaws.com \
--port 27017 \
--username admin \
--password \
--ssl
# 使用连接字符串
mongo "mongodb://admin:password@my-cluster.cluster-abc123.us-east-1.docdb.amazonaws.com:27017/?ssl=true&replicaSet=rs0"
1.2 Shell提示符 #
javascript
// 默认提示符
>
// 显示当前数据库
rs0:PRIMARY>
// 自定义提示符
prompt = function() {
return db.getName() + "> ";
}
1.3 常用Shell命令 #
javascript
// 显示帮助
help
// 数据库操作
show dbs // 显示所有数据库
use mydb // 切换数据库
db // 显示当前数据库
db.dropDatabase() // 删除当前数据库
// 集合操作
show collections // 显示所有集合
db.createCollection("users") // 创建集合
db.users.drop() // 删除集合
// 查看集合统计
db.users.stats()
db.users.dataSize()
db.users.indexStats()
二、数据库操作 #
2.1 创建数据库 #
javascript
// DocumentDB在首次插入数据时创建数据库
use mydb
// 插入数据后数据库才真正创建
db.users.insertOne({ name: "张三" })
// 查看数据库
show dbs
2.2 切换数据库 #
javascript
// 切换到指定数据库
use mydb
// 查看当前数据库
db.getName()
2.3 删除数据库 #
javascript
// 删除当前数据库
use mydb
db.dropDatabase()
// 输出
{ "dropped": "mydb", "ok": 1 }
三、集合操作 #
3.1 创建集合 #
javascript
// 显式创建
db.createCollection("users")
// 带选项创建
db.createCollection("logs", {
capped: false,
max: 10000,
size: 5242880
})
// 隐式创建(插入时自动创建)
db.products.insertOne({ name: "商品A" })
3.2 查看集合 #
javascript
// 显示所有集合
show collections
// 获取集合列表
db.getCollectionNames()
// 查看集合详情
db.users.stats()
3.3 删除集合 #
javascript
// 删除集合
db.users.drop()
// 输出
true
3.4 重命名集合 #
javascript
// 重命名集合
db.users.renameCollection("customers")
// 跨数据库重命名(不支持)
// DocumentDB不支持跨数据库重命名
四、文档插入 #
4.1 插入单个文档 #
javascript
// insertOne
db.users.insertOne({
name: "张三",
age: 30,
email: "zhangsan@example.com",
createdAt: new Date()
})
// 返回结果
{
"acknowledged": true,
"insertedId": ObjectId("65a1b2c3d4e5f67890123456")
}
4.2 插入多个文档 #
javascript
// insertMany
db.users.insertMany([
{
name: "李四",
age: 25,
email: "lisi@example.com"
},
{
name: "王五",
age: 28,
email: "wangwu@example.com"
}
])
// 返回结果
{
"acknowledged": true,
"insertedIds": [
ObjectId("65a1b2c3d4e5f67890123457"),
ObjectId("65a1b2c3d4e5f67890123458")
]
}
4.3 插入选项 #
javascript
// 有序插入(遇到错误停止)
db.users.insertMany(
[
{ _id: 1, name: "用户1" },
{ _id: 1, name: "用户2" }, // 重复ID
{ _id: 2, name: "用户3" }
],
{ ordered: true }
)
// 无序插入(继续插入其他文档)
db.users.insertMany(
[
{ _id: 1, name: "用户1" },
{ _id: 1, name: "用户2" },
{ _id: 2, name: "用户3" }
],
{ ordered: false }
)
五、文档查询 #
5.1 基本查询 #
javascript
// 查询所有文档
db.users.find({})
// 格式化输出
db.users.find({}).pretty()
// 查询特定字段
db.users.find({ name: "张三" })
// 查询单个文档
db.users.findOne({ name: "张三" })
5.2 查询操作符 #
javascript
// 比较操作符
db.products.find({ price: { $eq: 100 } }) // 等于
db.products.find({ price: { $ne: 100 } }) // 不等于
db.products.find({ price: { $gt: 100 } }) // 大于
db.products.find({ price: { $gte: 100 } }) // 大于等于
db.products.find({ price: { $lt: 100 } }) // 小于
db.products.find({ price: { $lte: 100 } }) // 小于等于
db.products.find({ price: { $in: [100, 200] } }) // 在列表中
db.products.find({ price: { $nin: [100, 200] } }) // 不在列表中
// 逻辑操作符
db.users.find({
$and: [
{ age: { $gte: 18 } },
{ status: "active" }
]
})
db.users.find({
$or: [
{ role: "admin" },
{ role: "superuser" }
]
})
db.users.find({
age: { $not: { $lt: 18 } }
})
db.users.find({
$nor: [
{ status: "deleted" },
{ status: "banned" }
]
})
// 元素操作符
db.users.find({ email: { $exists: true } })
db.users.find({ age: { $type: "int" } })
// 数组操作符
db.users.find({ tags: "编程" }) // 数组包含
db.users.find({ tags: { $all: ["编程", "阅读"] } }) // 包含所有
db.users.find({ tags: { $size: 3 } }) // 数组长度
db.users.find({ tags: { $elemMatch: { $gt: 5 } } }) // 数组元素匹配
5.3 投影 #
javascript
// 包含字段
db.users.find(
{ name: "张三" },
{ name: 1, email: 1 }
)
// 排除字段
db.users.find(
{ name: "张三" },
{ password: 0, createdAt: 0 }
)
// 数组切片
db.posts.find(
{},
{ comments: { $slice: 5 } } // 前5条评论
)
db.posts.find(
{},
{ comments: { $slice: [10, 5] } } // 跳过10条,取5条
)
// 数组元素匹配
db.users.find(
{},
{ grades: { $elemMatch: { $gte: 80 } } }
)
5.4 排序和分页 #
javascript
// 排序
db.users.find({}).sort({ age: 1 }) // 升序
db.users.find({}).sort({ age: -1 }) // 降序
db.users.find({}).sort({ age: -1, name: 1 }) // 多字段排序
// 分页
db.users.find({}).skip(0).limit(10) // 第1页
db.users.find({}).skip(10).limit(10) // 第2页
db.users.find({}).skip(20).limit(10) // 第3页
// 计数
db.users.countDocuments({})
db.users.countDocuments({ status: "active" })
// 去重
db.users.distinct("city")
六、文档更新 #
6.1 更新操作符 #
javascript
// $set - 设置字段值
db.users.updateOne(
{ name: "张三" },
{ $set: { age: 31, city: "上海" } }
)
// $unset - 删除字段
db.users.updateOne(
{ name: "张三" },
{ $unset: { tempField: "" } }
)
// $inc - 数值增减
db.products.updateOne(
{ _id: 1 },
{ $inc: { stock: -1 } }
)
// $mul - 数值乘法
db.products.updateOne(
{ _id: 1 },
{ $mul: { price: 1.1 } }
)
// $rename - 重命名字段
db.users.updateOne(
{ name: "张三" },
{ $rename: { "oldName": "newName" } }
)
// $setOnInsert - 仅在插入时设置
db.users.updateOne(
{ _id: 1 },
{ $setOnInsert: { createdAt: new Date() } },
{ upsert: true }
)
6.2 数组更新操作符 #
javascript
// $push - 添加数组元素
db.users.updateOne(
{ name: "张三" },
{ $push: { tags: "新标签" } }
)
// $push带选项
db.users.updateOne(
{ name: "张三" },
{
$push: {
scores: {
$each: [90, 85, 88],
$sort: -1,
$slice: 5
}
}
}
)
// $pull - 删除匹配元素
db.users.updateOne(
{ name: "张三" },
{ $pull: { tags: "旧标签" } }
)
// $pullAll - 删除多个元素
db.users.updateOne(
{ name: "张三" },
{ $pullAll: { tags: ["标签1", "标签2"] } }
)
// $addToSet - 添加唯一元素
db.users.updateOne(
{ name: "张三" },
{ $addToSet: { tags: "新标签" } }
)
// $pop - 删除首尾元素
db.users.updateOne(
{ name: "张三" },
{ $pop: { tags: 1 } } // 1删除最后一个,-1删除第一个
)
// $ - 更新第一个匹配元素
db.users.updateOne(
{ "grades.grade": 85 },
{ $set: { "grades.$.comment": "良好" } }
)
6.3 更新方法 #
javascript
// updateOne - 更新一个文档
db.users.updateOne(
{ name: "张三" },
{ $set: { age: 31 } }
)
// updateMany - 更新多个文档
db.users.updateMany(
{ status: "pending" },
{ $set: { status: "active" } }
)
// replaceOne - 替换整个文档
db.users.replaceOne(
{ _id: 1 },
{ name: "张三", age: 30, city: "北京" }
)
// findOneAndUpdate - 查找并更新
db.users.findOneAndUpdate(
{ name: "张三" },
{ $inc: { loginCount: 1 } },
{ returnDocument: "after" }
)
// upsert选项
db.users.updateOne(
{ email: "new@example.com" },
{ $set: { name: "新用户" } },
{ upsert: true }
)
七、文档删除 #
7.1 删除方法 #
javascript
// deleteOne - 删除一个文档
db.users.deleteOne({ name: "张三" })
// deleteMany - 删除多个文档
db.users.deleteMany({ status: "inactive" })
// findOneAndDelete - 查找并删除
db.users.findOneAndDelete(
{ name: "张三" },
{ sort: { createdAt: -1 } }
)
// 删除所有文档
db.users.deleteMany({})
7.2 删除选项 #
javascript
// 带写关注删除
db.users.deleteOne(
{ _id: 1 },
{ writeConcern: { w: "majority" } }
)
// 带条件删除
db.users.deleteMany({
createdAt: { $lt: new Date("2023-01-01") }
})
八、批量操作 #
8.1 bulkWrite #
javascript
// 批量操作
db.users.bulkWrite([
{
insertOne: {
document: { name: "用户1", age: 25 }
}
},
{
updateOne: {
filter: { name: "用户2" },
update: { $set: { age: 26 } }
}
},
{
deleteOne: {
filter: { name: "用户3" }
}
},
{
replaceOne: {
filter: { name: "用户4" },
replacement: { name: "用户4", age: 27 }
}
}
])
8.2 批量操作选项 #
javascript
// 有序批量操作
db.users.bulkWrite([...], { ordered: true })
// 无序批量操作
db.users.bulkWrite([...], { ordered: false })
// 带写关注
db.users.bulkWrite([...], {
ordered: false,
writeConcern: { w: "majority" }
})
九、命名规范 #
9.1 数据库命名 #
text
数据库命名规则:
├── 不能包含:/\. "$*<>:|?
├── 不能以"system."开头
├── 长度限制:64字节
├── 区分大小写
└── 建议:使用小写和下划线
9.2 集合命名 #
text
集合命名规则:
├── 不能包含:$ 或 null
├── 不能以"system."开头
├── 不能包含点号(嵌套除外)
├── 长度限制:120字节
├── 区分大小写
└── 建议:使用复数形式
9.3 字段命名 #
text
字段命名规则:
├── 不能包含:.
├── 不能以$开头
├── 区分大小写
├── _id为保留字段
└── 建议:使用驼峰命名
十、总结 #
10.1 常用命令速查 #
| 操作 | 命令 |
|---|---|
| 显示数据库 | show dbs |
| 切换数据库 | use dbname |
| 显示集合 | show collections |
| 插入文档 | insertOne/insertMany |
| 查询文档 | find/findOne |
| 更新文档 | updateOne/updateMany |
| 删除文档 | deleteOne/deleteMany |
| 创建索引 | createIndex |
| 查看索引 | getIndexes |
10.2 操作符速查 #
| 类型 | 操作符 |
|---|---|
| 比较 | $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin |
| 逻辑 | $and, $or, $not, $nor |
| 元素 | $exists, $type |
| 数组 | $all, $elemMatch, $size |
| 更新 | $set, $unset, $inc, $push, $pull, $addToSet |
下一步,让我们学习数据库操作!
最后更新:2026-03-27