【发布时间】:2021-10-13 10:16:58
【问题描述】:
我在使用 MongoDB 集合获取统计数据时遇到问题。
[
{
"_id": {"$oid": "616309f71b021c754992bfca"},
"correlatedNodes": [
{
"type": "IS_ULTIMATELY_CONSOLIDATED_BY",
"nodes": ["I07WOS4YJ0N7YRFE7309"]
}
],
"fromTaskId": 20,
"nodeName": "5493000U0YGG4VEQOX65"
},
{
"_id": {"$oid": "616309f71b021c754992bfcb"},
"correlatedNodes": [
{
"type": "IS_DIRECTLY_CONSOLIDATED_BY",
"nodes": ["529900P6OUCFPVWCFE19", "8945007IZBKFQUQLIP85"]
},
{
"type": "IS_ULTIMATELY_CONSOLIDATED_BY",
"nodes": ["529900P6OUCFPVWCFE19"]
}
],
"fromTaskId": 20,
"nodeName": "89450012XZ2GPWGIGH37"
},
{
"_id": {"$oid": "616309f71b021c754992bfcc"},
"correlatedNodes": [
{
"type": "IS_ULTIMATELY_CONSOLIDATED_BY",
"nodes": ["815600C9588783AB0210"]
},
{
"type": "IS_DIRECTLY_CONSOLIDATED_BY",
"nodes": ["815600C9588783AB0210"]
}
],
"fromTaskId": 20,
"nodeName": "815600228127946DFF05"
},
{
"_id": {"$oid": "616309f71b021c754992bfcd"},
"correlatedNodes": [
{
"type": "IS_ULTIMATELY_CONSOLIDATED_BY",
"nodes": ["549300LI58A0MHGHTZ98"]
}
],
"fromTaskId": 20,
"nodeName": "549300NV4OCF16TAS048"
}
]
我想获取相关节点字段的基本统计信息。
类似:
{
"IS_ULTIMATELY_CONSOLIDATED_BY": {
"count": 567,
"avg": 22,
"min": 3,
"max": 50
}
}
我的意思是使用每个连接类型的列表大小。
我尝试过这样的聚合查询:
db.node_correlations.aggregate([
{
$project: {"correlatedNodes": "$correlatedNodes" },
$unwind: "$correlatedNodes"
}
]);
但我收到错误:
[2021-10-13 12:14:10] com.mongodb.MongoCommandException:命令失败并出现错误 40323(Location40323):“管道阶段规范对象必须只包含一个字段。”在服务器 localhost:27017 上。完整的响应是 {"ok": 0.0, "errmsg": "A pipeline stage specification object must contain just one field.", "code": 40323, "codeName": "Location40323"}
【问题讨论】:
-
$project和$unwind是两个不同的阶段 - 您有语法错误。有关这些聚合阶段的正确用法,请参阅 MongoDB 手册文档。 -
如何获得
avg、min和max?顺便说一句,我认为您正在使用$unwind和$group寻找类似于this example 的东西。 -
您能否详细说明“每种连接类型的列表大小”?该组是
correlatedNodes.type并检索计数吗?那么 min、max 和 avg 是什么意思呢? -
通过 min、max 和 avg 我的意思是获取有关集合中所有记录中每种类型的最小列表大小的信息。平均值和最大值相同。
标签: mongodb statistics aggregate