首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重组文件:这有可能吗?

重组文件:这有可能吗?
EN

Stack Overflow用户
提问于 2018-09-24 07:01:34
回答 1查看 170关注 0票数 0

假设我有一个看起来像这样的收藏:

代码语言:javascript
复制
{
   "_id":  ObjectId(...),
   "recorded": ISODate("2018-05-05T11:05:32.000"),
   "devices": [
       {
           "id": "KSA2",
           "temp": 32,
           "ttl": 10
       },
       {
           "id": "KSA24",
           "temp": 28,
           "ttl": 10
       }       
   ]  
}
{
   "_id":  ObjectId(...),
   "recorded": ISODate("2018-05-05T18:23:45.000"),
   "devices": [
       {
           "id": "KSA2",
           "temp": 31,
           "ttl": 10
       },
       {
           "id": "KSA24",
           "temp": 16,
           "ttl": 10
       }       
   ]  
}

我需要做的是通过设备将其转换为文档:

代码语言:javascript
复制
{
    "Devices": [
        {
            "id": "KSA2",
            "observations": [
                {
                    "time":ISODate("2018-05-05T11:05:32.000"),
                    "temp":32,
                    "ttl":10
                }
                {
                    "time":ISODate("2018-05-05T18:23:45.000"),
                    "temp":31,
                    "ttl":10
                }
            ]


        },
        {
            "id":"KSA24",
            ...
        }
    ]
}

这是否可以使用聚合框架“在”mongodb中完成,或者我是否需要在外部使用Python或类似的东西来完成这个任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 09:06:05

在集合上运行以下聚合:

代码语言:javascript
复制
db['myCollection'].aggregate(
    [
        {
            $unwind: {
                path : "$devices",

            }
        },
        {
            $group: {
            _id : "$devices.id",
            observations : {$push : 
              {
                time : "$recorded",
                temp:"$devices.temp",
                ttl:"$devices.ttl"}
              }
            }
        },
        {
            $out: "devices"
        },
    ],
);

使用的阶段:

  • $unwind:每个设备元素创建一个文档。
  • $group:按设备id分组,将自定义子文档推送到bservation数组.
  • $out:将结果输出到一个新的集合,这里是“设备”。

这将在设备集合中输出:

代码语言:javascript
复制
db['devices'].find();
{ 
    "_id" : "KSA24", 
    "observations" : [
        {
            "time" : ISODate("2018-05-05T13:05:32.000+0200"), 
            "temp" : 28.0, 
            "ttl" : 10.0
        }, 
        {
            "time" : ISODate("2018-05-05T20:23:45.000+0200"), 
            "temp" : 16.0, 
            "ttl" : 10.0
        }
    ]
}
{ 
    "_id" : "KSA2", 
    "observations" : [
        {
            "time" : ISODate("2018-05-05T13:05:32.000+0200"), 
            "temp" : 32.0, 
            "ttl" : 10.0
        }, 
        {
            "time" : ISODate("2018-05-05T20:23:45.000+0200"), 
            "temp" : 31.0, 
            "ttl" : 10.0
        }
    ]
}

之后,使用新设备集合,或将其重命名为旧名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52474143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档