MongoDB 支持嵌套文档,即一个文档中可以包含另一个文档作为其字段。在聚合查询中,可以通过 $unwind
操作将嵌套文档展开,从而进行更灵活的查询和统计。
例如,假设我们有一个包含用户信息和订单信息的集合 users
,每个文档包含以下字段:
user_id
:用户IDname
:用户名orders
:订单列表,每个订单包含以下字段:order_id
:订单IDorder_date
:订单日期total_amount
:订单总金额
我们可以使用聚合索引和聚合框架来查询每个用户最近的订单信息。
首先,我们需要创建一个聚合索引:
代码语言:javascript复制db.users.createIndex({ "user_id": 1, "orders.order_date": -1 })
然后,我们可以使用聚合框架来查询每个用户最近的订单信息:
代码语言:javascript复制db.users.aggregate([
{
$unwind: "$orders"
},
{
$sort: { "user_id": 1, "orders.order_date": -1 }
},
{
$group: {
_id: "$user_id",
name: { $first: "$name" },
order_id: { $first: "$orders.order_id" },
order_date: { $first: "$orders.order_date" },
total_amount: { $first: "$orders.total_amount" }
}
},
{
$project: {
_id: 0,
user_id: "$_id",
name: 1,
order_id: 1,
order_date: 1,
total_amount: 1
}
}
])
上面的聚合操作将嵌套文档展开后按照用户ID和订单日期进行排序,然后通过 $group
操作获取每个用户最近的订单信息,并通过 $project
操作排除 _id
字段并重命名 user_id
字段,得到最终的结果。