如何切片和蒙化MongoDB聚合

时间:2018-12-01 16:19:05

标签: mongodb aggregation-framework

我是MongoDB的新手,正在尝试查询时将amount字段从decimal投射到double。现在,我将$$ROOT添加到数组中,然后对该数组进行切片以获取事务的子集。我认为当我推送到数组($group阶段)或切片($project阶段)之后,我大概可以转换它,但我不知道如何转换。有小费吗?最终目标是显示总和,计数和最近的交易(以后我需要添加排序逻辑)。

db.transactions.aggregate([
    {$match:{}},
    {$group:{
        _id:null,
        transactions:{
            $push:"$$ROOT"
        },
        count:{$sum: 1},
        sum: {$sum: "$amount"}
    }},
    {$project:{
        _id:0,
        summary:{ count: "$count", sum: {$convert:{input:"$sum",to:"double"}}},
        transactions: {$slice:["$transactions", 2]}
    }}
])

1 个答案:

答案 0 :(得分:0)

我发现$facet允许我这样做:

db.transactions.aggregate([{
    $facet:{
        summary: [
            {$match:{}},
            {$group:{
                _id:null,
                count:{$sum: 1},
                sum: {$sum: "$amount"}
            }},
            {$project:{
                _id:0,
                count: "$count",
                sum: {$convert:{input:"$sum",to:"double"}}}
            }
        ],
        transactions: [
            {$match:{}},
            {$sort:{date:-1,timestamp:-1}},
            {$limit:1},
            {$addFields:{amount: {$convert:{input:"$amount",to:"double"}}}}
        ]
    }
}]);