mongoDB 中的分组查询使用数组项计算总和

Group query in mongoDB using array items to calculate sum

我的 collection 中的每个文档都有一个 属性 数组,该数组有 objects 具有总计、索引等属性。我想对文档进行分组乘以第二个数组元素的总数 属性,如下面的查询。我怎样才能实现它?

我想让这个查询起作用:

db.nwt_envio_contacto.aggregate({  
   $project:{  
      "visualizacoes":true,
      "envio_id":true
   }   ‌​
},
{  
   $match:{  
      "envio_id":ObjectId("54c5ed8101ec09c26c7b23c6"),
      "visualizacoes":{  
         $elem‌​Match:{  
            "index":1
         }
      }
   }
},
{  
   $group:{  
      _id:null,
      total:{  
         $sum:"visualizacoes.$.total"
      }
   }
})

假设我有一个 collection 和这个文件 :

{
   "_id":ObjectId("54c5ed8101ec09c26c7b23c8"),
   "envio_id":ObjectId("54c5ed8101ec09c26c7b23c6"),
   "visualizacoes":[
      {
         "primeira":"2015-01-26 09:34:58",
         "ultima":"2015-01-26 14:17:18",
         "index":2,
         "total":4
      },
      {
         "primeira":"2015-01-26 09:35:13",
         "ultima":"2015-01-26 09:35:43",
         "index":2,
         "total":3
      }
   ]
}

基本上我想对索引等于 1 的所有可视化 objects 的总属性求和。

此聚合将对索引等于 1 的所有 visualizacoes 对象求和:

db.nwt_envio_contacto.aggregate([
    {$match:{
        "envio_id":ObjectId("54c5ed8101ec09c26c7b23c6")
    }},
    {$unwind: "$visualizacoes"},
    {$match:{
        "visualizacoes.index":1
    }},
    {$group:{
        _id:null,
        total:{  
            $sum:"$visualizacoes.total"
        }
    }}
])

您可以使用$unwind运算符将数组展平,在过滤索引为1的条目后,您就可以求和了。