MongoDB导入集合中的json文件片段



我有一个包含.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. 使用 mongoimport 将每个 json 文件中的数据加载到临时保留集合中;这应该相当快。
  2. 使用聚合将数据转换为离散文档,并使用 $out 运算符将每个文档保存到新集合中

聚合命令可能如下所示:

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

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

最新更新