我有一个包含以下数据的集合:
{
"_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: …
我有这个架构的多个文档,每个文档是每天每个产品:
{
_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
我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)