【发布时间】:2014-01-02 09:28:51
【问题描述】:
我在使用 MongoDB 的聚合框架做一些看似简单的事情时有点卡住了。
想象一下你的文档看起来像这样:
[
{ a: 1, b: 2 },
{ a: 1, b: 3 },
{ a: 5, b: 6 }
]
- 如何按字段
a对文档进行分组,然后按另一个字段(例如b)重新组合子文档,同时仍计算每个步骤的文档总数?
对于我们的示例,结果将是以下输出文档:
{
results: [
{
_id: {
a: 1
},
sum_a: 2,
doc_a: [
{
_id: {
b: 2
},
sum_b: 1
},
{
_id: {
b: 3
},
sum_b: 1
}
]
},
{
_id: {
a: 5
},
sum_a: 1,
doc_a: [
{
_id: {
b: 6
},
sum_b: 1
}
]
}
]
}
我尝试过这样的事情:
printjson(db.getSiblingDB('mydb').mycollection.aggregate([
{
$project: {
a: 1,
b: 1
}
},
{
$group: {
_id: {
a: '$a'
},
sum_a: {
$sum: 1
},
b: {
$first: '$b'
}
}
},
{
$group: {
_id: {
b: '$b'
},
sum_b: {
$sum: 1
}
}
},
{
$sort: {
sum_a: 1
}
}
]));
但在我进行的不同测试中,它不断覆盖之前的小组赛结果,错误地计算总和等等。
所以我不太确定如何解决这个问题。
【问题讨论】:
标签: mongodb mongoose aggregation-framework