繁体   English   中英

MongoDB:如何组合多个文档中的数组元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM