如何在Python中使用10个块等MongoDB进行平均?

时间:2018-02-25 10:00:04

标签: python database mongodb aggregation-framework aggregation

我想要平均10000条记录但是每10个值(10000个块中的10个块)我想要平均并存储10个值的平均值,然后移到MongoDb文档中的值的下一个10,

{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-03-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-03-01T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-03-15T09:00:00Z") }
{ "_id" : 4, "item" : "xyz", "price" : 5, "quantity" : 20, "date" : ISODate("2014-04-04T11:21:39.736Z") }
{ "_id" : 5, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-04-04T21:23:13.331Z") }

在下面的文档中,我想平均每2个文档的价格,比如10 + 20/2 = 15和5 + 5/2 = 5.所以我想知道如何用Python制作它。

1 个答案:

答案 0 :(得分:0)

尝试使用此聚合管道对价格进行分区并计算每个分区的平均值

将所有2到10替换为10分区

db.avgs.aggregate([
    {$sort : {_id : 1}},
    {$group : {_id : null, prices : {$push : "$price"}}},
    {$project : { _id : 0, average : {
        $map : {
            input : {$range : [0, {$ceil : {$divide : [{$size : "$prices"},2]}}]},
            as : "r",
            in : {$avg : {$slice : ["$prices", {$multiply : ["$$r", 2]}, 2]}}
        }
    }}}
]).pretty()

结果

{ "average" : [ 15, 5, 10 ] }