mongodb - 我需要帮助从 mongodb 获取聚合数据 - 有些在数组中,有些不在数组中
问题描述
我有一组如下所示的记录:
"_id" : ObjectId("bbbbbb1d9486c90479aaaaaa"),
"record" : {
"type" : "MX_GTI",
"products" : [
"DAM"
],
"services" : [
"MySQL",
"DB2",
"MSSQL"
],
"agents" : [
{
"gatewayName" : "impDBFgw01",
"agentId" : 10140,
"hpsAvg" : 772,
"hpsMax" : 42901,
"services" : "mssql"
},
{
"gatewayName" : "impDBFgw01",
"agentId" : 10120,
"hpsAvg" : 95,
"hpsMax" : 21631,
"services" : "mssql"
},
{
"gatewayName" : "impDBFgw02",
"agentId" : 10187,
"hpsAvg" : 0,
"hpsMax" : 0,
"services" : "mssql"
},
{
"gatewayName" : "impDBFgw03",
"agentId" : 10213,
"hpsAvg" : 0,
"hpsMax" : 0,
"services" : "db2"
}
],
"gateways" : {
"impDBFgw01" : {
"gatewayName" : "impDBFgw01",
"avgHps" : 875,
"maxHps" : 15474
},
"impDBFgw02" : {
"gatewayName" : "impDBFgw02",
"avgHps" : 0,
"maxHps" : 0
},
"impDBFgw03" : {
"gatewayName" : "impDBFgw03",
"avgHps" : 2892,
"maxHps" : 76009
}
},
"debug" : false
}
}
我需要两个查询的帮助:
- 对于包含 和 的所有记录,
type MX_GTI
获取字段,并将数组中的每个代理作为格式中的字符串。注意 - 服务可能是一个数组。products
DAM
services
hpsAvg
hpsMax
agents[]
<services>/<hpsAvg>/<hpsMax>
- 对于相同的记录,获取网关的数量(
gateways
对象中的元素数量)。它不是一个数组,我无法改变它。
谢谢你。任何帮助将不胜感激。
解决方案
检查此解决方案是否满足您的要求:
db.collection.aggregate([
{
$match: {
"record.type": "MX_GTI",
"record.products": "DAM"
}
},
{
$project: {
num_gateway: {
$size: {
$objectToArray: "$record.gateways"
}
},
agents: {
$map: {
input: "$record.agents",
in: {
$concat: [
{
$cond: [
{
$isArray: "$$this.services"
},
{
$reduce: {
input: "$$this.services",
initialValue: "",
in: {
$concat: [
"$$value",
"$$this",
","
]
}
}
},
"$$this.services"
]
},
"/",
{
$toString: "$$this.hpsAvg"
},
"/",
{
$toString: "$$this.hpsMax"
}
]
}
}
}
}
}
])
推荐阅读
- python - Seaborn 线图未正确绘制意味着
- excel - 如何使用 IF 公式根据其他列中的数据显示空白或 0?
- r - 重命名坐标轴
- c# - 使用 Microsoft Graph 查询 AzureAD Graph 扩展属性
- tortoisegit - 使用 TortoiseGit 更改多个提交
- javascript - Graphql 查询结果在 UI 中正确返回,但数据在应用程序内显示为“未定义”
- statistics - 在统计学中,样本是单个数据点还是数据点池?
- javascript - 设计一组 5 个 div 以使它们在大屏幕上均匀分布并在小屏幕上分成两行?
- python - numpy delete 正在将浮点值转换为字符串
- sql-server - Microsoft SQL Server 的所有“表选项”是什么?