如何解决MongoDb聚合查询:对每个数组计数嵌套对象的属性数
我的文档具有以下结构:
"_id" : "AQ106_2020-09-12T09","date" : "2020-09-12T09:00:00.000Z","station" : {
"name" : "AQ106","loc" : {
"type" : "Point","coordinates" : [
14.339263,40.814224
]
},"properties" : {
}
},"samples" : [
{
"t" : ISODate("2020-09-12T11:02:00.000+02:00"),"data" : {
"pm1_mg_m3" : 2.7,"pm2_5_mg_m3" : 4.6,"pm10_mg_m3" : 12,"P0" : 152,"P1" : 16,"P2" : 4.7,"P3" : 0.8,"P4" : 0.86,"P5" : 0.6,"P6" : 0.28,"P7" : 0.152,"P8" : 0.094,"P9" : 0.092,"P10" : 0.019,"P11" : 0,"P12" : 0,"P13" : 0.0188,"P14" : 0,"P15" : 0,"P16" : 0,"P17" : 0,"P18" : 0,"P19" : 0,"P20" : 0,"P21" : 0,"P22" : 0,"P23" : 0,"temp_celsius" : 32.59,"humRelPercent" : 34,"press_mBar" : 1010.79,"CO2mA" : 4,"NO2_WE_mV" : 226.419,"NO2_AE_mV" : 229.553,"OX_WE_mV" : 252.287,"OX_AE_mV" : 220.419,"CO_WE_mV" : 509.077,"AE_WE_mV" : 348.51,"batt_V" : 13.5,"source_V" : 17.6
}
},.... additional arrays
}
集合中的每个文档都有一个samples
字段,该字段是一个对象数组,每个字段都有一个ISODate类型的t
字段和一个包含传感器读数的object类型的data
字段。
我想为samples.data
中的每个元素计算对象samples
中的属性数,并过滤具有此计数== N的文档。
那怎么办
谢谢。
解决方法
您需要做一个小的更改,即使用filter
代替map
{
$project: {
station: "$station.name","n": {
$filter: {
input: "$samples.data",cond: {
$eq: [
{
$size: {
"$objectToArray": "$$this"
}
},39
]
}
}
}
}
}
,
我使用聚合框架将其部分理解为:
...pre.slice(index + 1,state.length)
但是如何过滤文档?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。