【问题标题】:MongoDB: How to combine array elements from multiple documents?MongoDB:如何组合来自多个文档的数组元素?
【发布时间】:2019-04-09 20:32:26
【问题描述】:

我使用基于大小的分桶方法将从移动设备收集的传感器数据存储在 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
            }

    ]
}

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以使用聚合框架来收集所有分散的数组。但是,根据聚合后投影的数据量,您可能仍面临 16 MB 的限制。

    db.getCollection("your_collection_name").aggregate(
        [
            { 
                "$unwind" : {
                    "path" : "$collectedData"
                }
            }, 
            { 
                "$group" : {
                    "_id" : "$experimentId", 
                    "collectedData" : {
                        "$addToSet" : "$collectedData"
                    }
                }
            }
        ], 
        { 
            "allowDiskUse" : true
        }
    );
    

    您可能希望在应用程序代码中执行此操作以实现万无一失的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      相关资源
      最近更新 更多