我在mongo db
的集合中有以下类型的文档{ _id:xx,
iddoc:yy,
type1:"sometype1",
type2:"sometype2",
date:
{
year:2015,
month:4,
day:29,
type:"day"
},
count:23
}
我想对所有文档的iddoc字段数分组进行总结:
我希望对这些总和进行排序。
我认为在mongo db聚合框架中这可能很容易,但我是新手,并希望得到一个提示。
答案 0 :(得分:2)
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}}
])
答案 1 :(得分: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}}