mongodb - 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
字段,该字段是一个对象数组,每个t
字段都有一个 ISODate 类型的data
字段和一个包含传感器读数的 object 类型的字段。我想将samples.data
每个元素 的属性数计算为对象,samples
并过滤具有此计数 == N 的文档。怎么做?谢谢。
解决方案
您需要做一个小改动,即使用filter
而不是map
{
$project: {
station: "$station.name",
"n": {
$filter: {
input: "$samples.data",
cond: {
$eq: [
{
$size: {
"$objectToArray": "$$this"
}
},
39
]
}
}
}
}
}
工作Mongo游乐场
推荐阅读
- r - 在模块中使用 shiny.i18n 翻译闪亮的应用程序?
- ubuntu - 无法建立 ssh 连接,/bin/bash: No such file or directory
- node.js - 用 Jest 模拟 SQS
- ruby-on-rails - Rails 查询关联(加入)'rich_text' 不是 nil/empty
- php - 我需要 preg_match_all() 模式在方括号标签 PHP 中获取字符串
- node.js - 如何使用 mongoose 更新 MongoDb 中的嵌入式数组/对象?
- python - 循环遍历字符串列表并删除特定列表项(i)之后的所有项目,其中 i 可以是 a 或 b 或 c
- deep-learning - 什么是多标签二元分类?
- javascript - 在运行教程中给出的代码后,按照 chrome 扩展教程得到“Uncaught SyntaxError:missing )”
- android - 添加工厂时出现 Moshi ArrayOutOfBoundsException