我有一个MongoDB
集合,如下所示。我想在min\max\avg\count
xxx
字段的$match: { "Parsed.FileId": "421462559", "Parsed.MessageId": "123" }
请注意,每个文档的Fields
仅包含一个带有SchemaName = xxx
的字段
MongoDB aggregation
(或其他功能)有可能吗?如何?
{
"_id" : NumberLong(409),
"Parsed" : {
"FileId" : "421462559",
"MessageId": "123",
"Fields" : [
{
"SchemaName" : "xxx",
"Type" : 0,
"Value" : 6
},
{
"SchemaName" : "yyy",
"Type" : 0,
"Value" : 5
}
]
}
},
{
"_id" : NumberLong(510),
"Parsed" : {
"FileId" : "421462559",
"MessageId": "123",
"Fields" : [
{
"SchemaName" : "xxx",
"Type" : 0,
"Value" : 10
},
{
"SchemaName" : "yyy",
"Type" : 0,
"Value" : 20
}
]
}
}
对于上面的示例集合,我希望将字段xxx
的结果转换为:
{
count: 2,
min: 6,
max: 10,
avg: 8
}
答案 0 :(得分:0)
您可以在aggregation
下使用
基本上,您需要首先$unwind
嵌套数组,然后必须将 $group
与相应的累加器一起使用,即min
max
$sum
$avg
db.collection.aggregate([
{ "$match": { "Parsed.Fields.SchemaName": "xxx" }},
{ "$unwind": "$Parsed.Fields" },
{ "$match": { "Parsed.Fields.SchemaName": "xxx" }},
{ "$group": {
"_id": null,
"count": { "$sum": 1 },
"max": { "$max": "$Parsed.Fields.Value" },
"min": { "$min": "$Parsed.Fields.Value" },
"avg": { "$avg": "$Parsed.Fields.Value" }
}}
])