Mongoose: aggregate聚合

811 阅读1分钟

projectproject 、match 、groupgroup、sort、limitlimit、skip、$lookup 表关联

$project

过滤表字段,只显示表中的下面三个字段

db.order.aggregate([
    {
        $project: { order_id: 1, trade_no: 1, all_price: 1 }
    }
])

$match

匹配字段符合规则的

db.order.aggregate([
    {
        $project: { order_id: 1, trade_no: 1, all_price: 1 }
    },
    {
        $match: { "all_price": { $gte: 90 } }
    }
])

$group

以某个字段进行分组 可以统计字段之和

db.order_item.aggregate(
    [
        {
            $group: { _id: "$order_id", total: { $sum: "$num" } }
        }
    ]
)

$sort

以某个字段排序 -1降序 1升序

db.order.aggregate([
    {
        $project: { trade_no: 1, all_price: 1 }
    },
    {
        $match: { "all_price": { $gte: 90 } }
    },
    {
        $sort: { "all_price": -1 }
    }

])

$limit

返回数据数量

db.order.aggregate([
    {
        $project: { trade_no: 1, all_price: 1 }
    },
    {
        $match: { "all_price": { $gte: 90 } }
    },
    {
        $sort: { "all_price": -1 }
    },
    {
        $limit: 1
    }

])

$skip

跳过几条数据

db.order.aggregate([
    {
        $project: { trade_no: 1, all_price: 1 }
    },
    {
        $match: { "all_price": { $gte: 90 } }
    },
    {
        $sort: { "all_price": -1 }
    },
    {
        $skip: 1
    }

])

$lookup

表关联查询

db.order.aggregate([
    {
        $lookup:
        {
            from: "order_item",
            localField: "order_id",
            foreignField: "order_id",
            as: "items"
        }
    }
])