mongodb - $sum mongodb 中具有相同 id 的数组

标签 mongodb mongodb-query aggregation-framework

我收藏的两个文档如下所示:

第一个文件

{
 "_id" : 2055,
 "counervalues" : {
     "chcounter" : 3
     "bscounter" : 10 
  }
 "attributionvalues" :[
 {
     "id" : 1
     "conversionvalue" : 85.0
     "conversioncounter" : 6300.0
 }, 
 {
     "id" : 2
     "conversionvalue" : 25.0
     "conversioncounter" : 600
 }
}

第二个文档

{
 "_id" : 1046,
 "counervalues" : {
     "chcounter" : 23
     "bscounter" : 46 
  }
 "attributionvalues" :[
 {
     "id" : 1
     "conversionvalue" : 15.0
     "conversioncounter" : 275.0     
 }, 
 {
     "id" : 2
     "conversionvalue" : 65.0
     "conversioncounter" : 12000.0
 }
}

现在我想应用聚合框架来获得一个新文档,其结果如下:

结果

{
 "_id" : 3005,
 "counervalues" : {
     "chcounter" : 26
     "bscounter" : 56 
  }
 "attributionvalues" :[
 {
     "id" : 1
     "conversionvalue" : 100.0
     "conversioncounter" : 6575.0     
 }, 
 {
     "id" : 2
     "conversionvalue" : 90.0
     "conversioncounter" : 12600.0
 }
}

我是这样开始聚合的:

db.conversion.counters.aggregate({
    $match:
    {
        "_id" : {"$gte" : 1046 , "$lte" : 2055}
    }
    $group:
    {
        cvchc: {$sum: "$counervalues.chcounter"}
        cvbsc: {$sum: "$counervalues.bscounter"}
    }
});

但我很难根据他们的 id 匹配属性值并添加它们。

有人有想法吗?

最佳答案

运行以下聚合管道,应该会为您提供所需的结果:

db.conversion.aggregate([
    { "$match": {  "_id" : { "$gte" : 1046 , "$lte" : 2055 } } },
    { "$unwind": "$attributionvalues" },
    {
        "$group": {
            "_id": "$attributionvalues.id",
            "cvchc": { "$sum": "$counervalues.chcounter" },
            "cvbsc": { "$sum": "$counervalues.bscounter" },
            "avcv": { "$sum": "$attributionvalues.conversionvalue" },
            "avcc": { "$sum": "$attributionvalues.conversioncounter" }
        }
    },
    {
        "$group": {
            "_id": null,
            "chcounter": { "$first": "$cvchc" },
            "bscounter" : { "$first": "$cvbsc" },
            "attributionvalues": { 
                "$push": {
                    "id": "$_id",
                    "conversionvalue": "$avcv" ,
                    "conversioncounter": "$avcc" 
                }
            }        
        }
    },
    {
        "$project": {
            "counervalues": {
                "chcounter": "$chcounter",
                "bscounter": "$bscounter"
            },
            "attributionvalues": 1
        }
    } 
])

关于mongodb - $sum mongodb 中具有相同 id 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960454/

相关文章:

php - 如何在mongodb中找到数组的最后一项?

python - pymongo:删除重复项( map 减少?)

python - 在mongo/python中查找()指定数量的记录

MongoDB 聚合 - $project 和 $cond

javascript - 如何使用 Nodejs 对远程 Mongodb 进行 CRUD 操作

mongodb - 在 Golang 的两个不同结构字段中映射 Mongo _id

arrays - 有条件地减少 Mongo 聚合中的两个数组字段

arrays - 更新 mongo 3.5 嵌套数组中的值

java - mongo 中的序列 - 可以依赖 findAndModify() 吗?

mongodb - 按服务器状态更改 HTTP 路由