首页 文章

如何使用$ avg来平均数组内的字段

提问于
浏览
1

我正在使用Mongodb 3.2,我需要计算数组内的所有字段

这些是我收藏的一个例子

{
  "memTotal" : 33730525659,
  "swapTotal" : 16936129790,
  "queueList" : [
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
  ],
},
{
  "memTotal" : 33730525659,
  "swapTotal" : 16936129790,
  "queueList" : [
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
  ],
},
{
  "memTotal" : 33730525659,
  "swapTotal" : 16936129790,
  "queueList" : [
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
    {
      "usedSlots" : 2,
      "totalSlots" : 8,
      "reservedSlots" : 0,
    },
  ],
},

我需要计算“queueList.useSlots”,“queueList.totalSlots”,“queueList.totalSlots”的平均值,请记住queueList是一个数组 .

到目前为止,我所做的是使用聚合,首先是我{$ unwind:“queueList”},{$ group:{useSlots:{$ avg:“queueList.useSlots”}}}

但这会返回错误的平均值:-(

任何帮助将非常感激:-)谢谢!

1 回答

  • 2

    请尝试以下查询 .

    db.memory.aggregate([
    {$unwind : "$queueList"}, 
    {$group : {_id : "$_id",
       "avgUseSlots" :{$avg :  "$queueList.usedSlots"},
       "avgTotSlots" :{$avg :  "$queueList.totalSlots"},
       "avgReservedSlots" :{$avg :  "$queueList.reservedSlots"}
       }
       }
     ]);
    

    Output:-

    {
        "_id" : ObjectId("57816e7285ae6441865d83e4"),
        "avgUseSlots" : 2,
        "avgTotSlots" : 8,
        "avgReservedSlots" : 0
    }
    

相关问题