MongoDB的聚合管道(Aggregation Pipeline)是什么?如何使用它?

MongoDB数据备份与恢复主要有以下几种方式:

  1. mongodump和mongorestore:
    mongodump备份:
mongodump -h dbhost -d dbname -o dbdirectory

mongorestore恢复:

mongorestore -h dbhost -d dbname --drop --dir dbdirectory 
  1. 文件备份:直接拷贝数据库文件及所有角色和用户的权限文件。
    然后关闭MongoDB,替换相关文件并启动即可恢复。
  2. 副本集或分片环境中的延时节点:
    在从节点上直接拷贝数据库文件,然后在需要恢复的主节点上关闭MongoDB,替换相关文件并启动。
  3. 使用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" }
        }
    }
])