MongoDB数据备份与恢复主要有以下几种方式:
- mongodump和mongorestore:
mongodump备份:
mongodump -h dbhost -d dbname -o dbdirectory
mongorestore恢复:
mongorestore -h dbhost -d dbname --drop --dir dbdirectory
- 文件备份:直接拷贝数据库文件及所有角色和用户的权限文件。
然后关闭MongoDB,替换相关文件并启动即可恢复。 - 副本集或分片环境中的延时节点:
在从节点上直接拷贝数据库文件,然后在需要恢复的主节点上关闭MongoDB,替换相关文件并启动。 - 使用MongoDB Atlas的持续备份功能,可以按小时备份并长期保留。
手动启动恢复:
选择一个恢复点,下载备份到本地,然后使用mongorestore命令进行恢复。
自动恢复:
如果集群发生故障,Atlas可以自动从最近的恢复点还原集群。
示例:
# 备份test数据库到/backups目录
mongodump -h localhost -d test -o /backups
# 恢复test数据库,先drop后恢复数据
mongorestore -h localhost -d test --drop --dir /backups
MongoDB聚合管道用于对数据进行聚合计数,过滤,分组等操作。语法如下:
db.collection.aggregate([
{ $operation1: {...} },
{ $operation2: {...} },
...
])
$operation可以是以下之一:
- $match: 过滤文档。
- $group: 把集合中的文档分组,用来统计结果。
- $sort: 对文档排序。
- $limit:限制聚合管道返回的文档数。
- $skip: 跳过指定数量的文档,然后再返回剩余的文档。
- $project: 修改输入文档的结构。可以用来重命名、增加或删除字段。
- $unwind: 将数组类型的字段拆分成多条文档。
示例:
# 计算test集合中的订单总金额
db.orders.aggregate([
{
$group: {
_id: null,
total: { $sum: "$amount" }
}
}
])
# 根据客户分组,计算每个客户的订单数量和总金额
db.orders.aggregate([
{
$group: {
_id: "$cust_id",
count: { $sum: 1 },
total: { $sum: "$amount" }
}
}
])