mongodb - MongoDB:如何组合来自多个文档的数组元素?
问题描述
我使用基于大小的分桶方法将从移动设备收集的传感器数据存储在 mongodb 中。由于 mongodb 对文档大小有 16mb 的限制,因此我的数据分布在这样的多个文档中。
文件 1:
{
"_id" : ObjectId("5ca411ad4fa0fa4c4893b025"),
"experimentId" : ObjectId("5ca411ac4fa0fa4c4893b024"),
"collectedData" :
[{
"pressure" : 125,
"lat" : 37.5
},
{
"pressure" : 155,
"lat" : 47.5
},
{
"pressure" : 128,
"lat" : 36.5,
}]
}
文件 2:
{
"_id" : ObjectId("5cace327b322a8893df703b3"),
"experimentId" : ObjectId("5ca411ac4fa0fa4c4893b024"),
"collectedData" : [
{
"pressure" : 124,
"lat" : 35.5
},
{
"pressure" : 115,
"lat" : 42.5
},
{
"pressure" : 15,
"lat" : 52.5
}
]
}
请注意,为同一实验/任务创建的文档具有相同的“experimentId”。
如何将多个文档中的“collectedData”与相同的“experimentId”结合起来,以便以后可以使用此信息进行数据可视化?
我希望输出采用以下格式。
{
"collectedData" : [
{
"pressure" : 125,
"lat" : 37.5
},
{
"pressure" : 155,
"lat" : 47.5
},
{
"pressure" : 128,
"lat" : 36.5,
},
{
"pressure" : 124,
"lat" : 35.5
},
{
"pressure" : 115,
"lat" : 42.5
},
{
"pressure" : 15,
"lat" : 52.5
}
]
}
解决方案
您可以使用聚合框架来收集所有分散的数组。但是,根据聚合后投影的数据量,您可能仍面临 16 MB 的限制。
db.getCollection("your_collection_name").aggregate(
[
{
"$unwind" : {
"path" : "$collectedData"
}
},
{
"$group" : {
"_id" : "$experimentId",
"collectedData" : {
"$addToSet" : "$collectedData"
}
}
}
],
{
"allowDiskUse" : true
}
);
您可能希望在应用程序代码中执行此操作以实现万无一失的解决方案。
推荐阅读
- javascript - 用星号或最后两个单词替换最后一个单词
- git - 如何列出从特定分支的任何提交创建的所有 git 分支
- python - 如何在执行期间不提供输入的情况下运行 aws-nuke?
- rabbitmq - Camel RabbitMQ 连接器在使用它们之前会读取数千条消息
- python - 我怎样才能让这个数据框显示最经常出现的单词
- pandas - 为什么我的代码在 1 列中给我数据,它应该在两个不同的列中给我
- php - 在 PHP 中处理 Cobol 文件和工作簿
- haskell - 如何创建一种特殊的列表?
- c++ - 使用 C++/Qt(已知密码)打开加密的 PDF
- sql - 如何修复 psql ubuntu 中“psql”处或附近的语法错误