总结mongodb中多个子文档的值

时间:2013-11-15 08:28:00

标签: mongodb aggregation-framework

我有以下数据结构:

{
  "_id" : ObjectId("4e96f771e016b98aa63d88c9"),
  "goals" : {
    "4809" : {
      "VisitsBeforeGoal" : 12,
      "pagesBeforeGoal" : 16
    },
    "4810" : {
      "VisitsBeforeGoal" : 2,
      "pagesBeforeGoal" : 6
    },
    "4811" : {
      "VisitsBeforeGoal" : 3,
      "pagesBeforeGoal" : 8
    }
  },
  "totalPages" : 246,
  "totalVisits" : 114
}

4809,4810和4811是不知道的goalID,例如动态的。

现在我想要的是在每个目标和“pagesBeforeGoal”以及一系列目标上获得“VisitsBeforeGoal”的总和。类似的东西:

{
  goals:[
    {
          "goalID" : 4809,
          "VisitsBeforeGoal" : 245,
          "pagesBeforeGoal" : 632,
          "sum" : 45,    
    }
  ]
}

我似乎无法弄清楚如何进入每个子文档,因为我不知道goalID。我尝试了类似“目标。$ .VisitsBeforeGoal”,但这似乎没有用。

1 个答案:

答案 0 :(得分:0)

您的数据结构存在问题。为了使goals.$.VisitsBeforeGoal有效,您需要一个数组。所以你的结构必须是

"goals" : [ {
        "id" : 4809,
        "VisitsBeforeGoal" : 12,
        "pagesBeforeGoal" : 16
    },
    {
        "id" : 4810,
        "VisitsBeforeGoal" : 2,
        "pagesBeforeGoal" : 6
    },
    {
        "id" : 4811,
        "VisitsBeforeGoal" : 3,
        "pagesBeforeGoal" : 8
    }
]

使用动态键不是一个好选择。如果你有机会改变你的结构,我会建议你改变它。