MongoDB导入集合

时间:2017-03-22 10:55:30

标签: mongodb

我有一个包含.json文件的文件夹。每个文件都是这样的:

{"data":
   [{"status":0,
     "timestamp":...
     },
     {"status":0,
     "timestamp":...
     },{...
    }],
  "otherinfos":"random"
}

我需要做的是在集合中导入数据数组的内容。 文件大约是10Mo,文件夹包含数千个文件...... 我尝试了“mongoimport”命令,但它插入了整个对象,而不是“data”数组中可用的所需元素列表。 有没有办法从mongo中的json文件导入数组? 是否有从文件夹导入多个文件的开箱即用解决方案?

谢谢,

安托

PS:我做了一个小的java软件来读取每个文件,并从mongo的数组中导入对象列表,但经过数周的计算后,我很想听到更好的解决方案。

编辑: 我想将我的mongoDB数据存储起来,每个状态和时间戳都作为一个单独的文档:

{
  "status":0,
  "timestamp":...
},
{
  "status":0,
  "timestamp":...
},
{...
}

所以我可以在时间戳上请求获取状态,例如。我有十亿个这样的条目。

1 个答案:

答案 0 :(得分:1)

你可以把它作为一个两阶段的过程来做:

  1. 使用mongoimport将每个json文件中的数据加载到临时保存集合中;这应该很快。
  2. 使用aggregation将数据转换为离散文档,并使用$out operator
  3. 将每个文档保存到新的集合中

    聚合命令可能如下所示:

    db.tempcollection.aggregate([
      { $unwind: "$data" },
      { $project: {
        _id: 0, 
        "status" : "$data.status", 
        "timestamp" : "$data.timestamp"
        }
      },
      { $out: "newcollection" }
    ]);
    

    这可能会很快得到处理,因为它可以由MongoDB本身在数据库服务器上完成;但是,对于小数据样本进行一些性能测试可能值得一试。