我的集合中的每个文档都有一个数组属性,该数组包含具有total,index等属性的对象。我想用第二个数组元素的total属性的总和对文档进行分组,比如下面的查询。我怎样才能实现呢?
我想让这个查询起作用:
db.nwt_envio_contacto.aggregate({
$project:{
"visualizacoes":true,
"envio_id":true
}
},
{
$match:{
"envio_id":ObjectId("54c5ed8101ec09c26c7b23c6"),
"visualizacoes":{
$elemMatch:{
"index":1
}
}
}
},
{
$group:{
_id:null,
total:{
$sum:"visualizacoes.$.total"
}
}
})
假设我有一个包含此文档的集合:
{
"_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的所有visualizacoes对象的总属性。
答案 0 :(得分:1)
此聚合将对索引等于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的条目后,您就可以求和了。