使用 mongo 数据库聚合框架求和
Doing a sum with mongo db aggregation framework
我在 mongo db
的集合中有以下类型的文档
{ _id:xx,
iddoc:yy,
type1:"sometype1",
type2:"sometype2",
date:
{
year:2015,
month:4,
day:29,
type:"day"
},
count:23
}
我想对所有文档按 iddoc 分组的字段计数求和,其中:
- 类型 1 在 ["type1A","type1B",...]
- 其中 type2 在 ["type2A","type2B",...]
- date.year: 2015,
- date.month: 4,
- date.type: "day"
- date.day 4 到 7 之间
然后我想对这些总和进行排序。
我认为这在 mongo 数据库聚合框架中可能很容易做到,但我是新手,希望得到入门提示。
这很容易用 aggregation pipeline:
db.test.aggregate([
// Filter the docs based on your criteria
{$match: {
type1: {$in: ['type1A', 'type1B']},
type2: {$in: ['type2A', 'type2B']},
'date.year': 2015,
'date.month': 4,
'date.type': 'day',
'date.day': {$gte: 4, $lte: 7}
}},
// Group by iddoc and count them
{$group: {
_id: '$iddoc',
sum: {$sum: 1}
}},
// Sort by sum, descending
{$sort: {sum: -1}}
])
如果我理解正确的话:
db.col.aggregate
(
[{
$match:
{
type1: {$in: ["type1A", type1B",...]},
type2: {$in: ["type2A", type2B",...]},
"date.year": 2015,
"date.month": 4,,
"date.day": {$gte: 4, $lte: 7},
"date.type": "day"
}
},
{
$group:
{
_id: "$iddoc",
total_count: {$sum: "$count"}
}
},
{ $sort: {total_count: 1}}]
)
这是在 4 到 7 之间过滤字段 date.day(如果不是,请使用 $gt 和 $lt 排除它们)。并将结果从低到高排序(升序),如果你想做降序排序,那么:
{ $sort: {total_count: -1}}
我在 mongo db
的集合中有以下类型的文档{ _id:xx,
iddoc:yy,
type1:"sometype1",
type2:"sometype2",
date:
{
year:2015,
month:4,
day:29,
type:"day"
},
count:23
}
我想对所有文档按 iddoc 分组的字段计数求和,其中:
- 类型 1 在 ["type1A","type1B",...]
- 其中 type2 在 ["type2A","type2B",...]
- date.year: 2015,
- date.month: 4,
- date.type: "day"
- date.day 4 到 7 之间
然后我想对这些总和进行排序。
我认为这在 mongo 数据库聚合框架中可能很容易做到,但我是新手,希望得到入门提示。
这很容易用 aggregation pipeline:
db.test.aggregate([
// Filter the docs based on your criteria
{$match: {
type1: {$in: ['type1A', 'type1B']},
type2: {$in: ['type2A', 'type2B']},
'date.year': 2015,
'date.month': 4,
'date.type': 'day',
'date.day': {$gte: 4, $lte: 7}
}},
// Group by iddoc and count them
{$group: {
_id: '$iddoc',
sum: {$sum: 1}
}},
// Sort by sum, descending
{$sort: {sum: -1}}
])
如果我理解正确的话:
db.col.aggregate
(
[{
$match:
{
type1: {$in: ["type1A", type1B",...]},
type2: {$in: ["type2A", type2B",...]},
"date.year": 2015,
"date.month": 4,,
"date.day": {$gte: 4, $lte: 7},
"date.type": "day"
}
},
{
$group:
{
_id: "$iddoc",
total_count: {$sum: "$count"}
}
},
{ $sort: {total_count: 1}}]
)
这是在 4 到 7 之间过滤字段 date.day(如果不是,请使用 $gt 和 $lt 排除它们)。并将结果从低到高排序(升序),如果你想做降序排序,那么:
{ $sort: {total_count: -1}}