![](/img/trans.png)
[英]In MongoDb is there a way to get last 1000 array elements from multiple documents
[英]MongoDB: How to combine array elements from multiple documents?
我正在使用基于大小的分组方法存储从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”。
如何将来自多个文档的“collectData”与相同的“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
}
);
您可能希望在应用程序代码中执行此操作以获得防范解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.