Mongodb Mongo DB聚合框架计算平均文档

Mongodb Mongo DB聚合框架计算平均文档,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有问题集每个档案都可能有很多问题。 {"_id":"..." , "pid":"...",.....} 使用mongo DB new aggregation framework如何计算每个配置文件的平均问题数? 尝试了以下操作但未成功: { "aggregate" : "question" , "pipeline" : [ { "$group" : { "_id" : "$pid" , "qCount" : { "$sum" : 1}}} , { "$group" : { "qavg"

我有问题集每个档案都可能有很多问题。

{"_id":"..." , "pid":"...",.....}
使用mongo DB new aggregation framework如何计算每个配置文件的平均问题数?

尝试了以下操作但未成功:

{ "aggregate" : "question" , "pipeline" : [ { "$group" : { "_id" : "$pid" , "qCount" : { "$sum"    : 1}}} , { "$group" : { "qavg" : { "$avg" : "qCount"} , "_id" :  null }}]}
只有一个组操作员才能完成吗


谢谢。

对于这一点,您只需要知道问题的数量,以及不同配置文件的数量(我想是用“pid”唯一标识的)。使用聚合框架,您需要分两个阶段进行:

  • 首先,计算每个PID的问题数
  • 然后计算每个PID的平均问题数
你会这样做:

第一步:

db.profiler.aggregate( [
    { $group: { _id: '$pid', count: { '$sum': 1 } } },
] );
哪些输出(在我的例子中,使用一些示例数据):

我有四个档案,分别有7、1、3或5个问题

现在,根据这个结果,我们运行另一个组,但在这种情况下,我们实际上不想按任何内容进行分组,因此我们需要将
\u id
值设置为null,如下面第二个组中所示:

db.profiler.aggregate( [
    { $group: { _id: '$pid', count: { '$sum': 1 } } },
    { $group: { _id: null, avg: { $avg: '$count' } } }
] );
然后输出:

{
    "result" : [
        { "_id" : null, "avg" : 4 }
    ], 
    "ok" : 1
}

这告诉我,我平均每个配置文件有4个问题。

在最后一个$group上使用空的_id值对我来说是绝对不会发生的。
{
    "result" : [
        { "_id" : null, "avg" : 4 }
    ], 
    "ok" : 1
}