相关疑难解决方法(0)

具有数组值总和的MongoDB聚合

我有一个包含以下数据的集合:

{
    "_id" : ObjectId("5516d416d0c2323619ddbca8"),
    "date" : "28/02/2015",
    "driver" : "user1",
    "passengers" : [
        {
            "user" : "user2",
            "times" : 2
        },
        {
            "user" : "user3",
            "times" : 3
        }
    ]
}
{
    "_id" : ObjectId("5516d517d0c2323619ddbca9"),
    "date" : "27/02/2015",
    "driver" : "user2",
    "passengers" : [
        {
            "user" : "user1",
            "times" : 2
        },
        {
            "user" : "user3",
            "times" : 2
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

并且我想执行聚合以便我知道某个乘客,与某个驱动程序相关的时间,在我的示例中它将是:对于user1:[{ driver: user2, times: 2}] 对于user2:[{ driver: user1, times: 2}] 对于user3:[{ driver: user1, times: …

mongodb mongodb-query aggregation-framework

7
推荐指数
1
解决办法
2万
查看次数

MongoDB聚合汇总子文档上的每个键

我有这个架构的多个文档,每个文档是每天每个产品:

{
    _id:{},
    app_id:'DHJFK67JDSJjdasj909',
    date:'2014-08-07',
    event_count:32423,
    event_count_per_type: {
        0:322,
        10:4234,
        20:653,
        30:7562
    }
}
Run Code Online (Sandbox Code Playgroud)

我想得到特定date_range的每个event_type的总和.
这是我正在寻找的输出,其中每个事件类型已在所有文档中求和.event_count_per_type的键可以是任何东西,所以我需要一些可以遍历每个键的东西,而不是必须隐含它们的名字.

{
    app_id:'DHJFK67JDSJjdasj909',
    event_count:324236456,
    event_count_per_type: {
        0:34234222,
        10:242354,
        20:456476,
        30:56756
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我一直在尝试几个查询,这是迄今为止我得到的最好的但是子文档值没有求和:

db.events.aggregate(
{
    $match: {app_id:'DHJFK67JDSJjdasj909'}
},
{
    $group: {
        _id: {
            app_id:'$app_id',
        },
        event_count: {$sum:'$event_count'},
        event_count_per_type: {$sum:'$event_count_per_type'}
    }
},
{
    $project: {
        _id:0,
        app_id:'$_id.app_id',
        event_count:1,
        event_count_per_type:1
    }
}
)
Run Code Online (Sandbox Code Playgroud)

我看到的输出是event_count_per_type键的值为0,而不是对象.我可以修改架构,以便键是在文档的顶层,但将仍然意味着我必须组语句给每个密钥,因为我不知道密钥的名字会是什么一个条目我不能做.

任何帮助将不胜感激,如果需要,我愿意更改我的架构,并尝试mapReduce(尽管从文档中看起来表现不错.)

javascript mapreduce mongodb mongodb-query aggregation-framework

4
推荐指数
1
解决办法
2848
查看次数

Mongodb聚合中的求和数组元素

c在每个文档中都有以下带有数组的集合

{
  {
    id: 1,
    k: 2.2,
    type: "dog",
    c: [ {parentId:1, p:2.2}, {parentId:1, p:1.4} ]
  },

  {
    id: 2,
    k: 4.3,
    type:"cat",
    c: [ {parentId:2, p:5.2}, {parentId:2, p:4.5} ]
  }
}
Run Code Online (Sandbox Code Playgroud)

parentId在每个子文档中c是包含文档的 id。

我想对所有文档进行分组,type并且在每个组中都知道该组的所有数组中的总和k和总和p

目前我k在小组赛阶段求和,但p在应用程序的结果数组中求和。我想p在 DB 中求和!

这就是我目前所做的:

db.myCol.aggregate([

{ 
  $group: {
    _id: { type: '$type'},
    k: {$sum: '$k'}, // sum k values, very easy!
    // p: {$sum: '$c.0.p'} <==== Does not …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

4
推荐指数
1
解决办法
7086
查看次数