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":{
$elemMatch:{
"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的条目后,您就可以求和了。
我的 collection 中的每个文档都有一个 属性 数组,该数组有 objects 具有总计、索引等属性。我想对文档进行分组乘以第二个数组元素的总数 属性,如下面的查询。我怎样才能实现它?
我想让这个查询起作用:
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"
}
}
})
假设我有一个 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的条目后,您就可以求和了。