【问题标题】:MongoDB import piece of json files in collectionMongoDB在集合中导入一段json文件
【发布时间】:2017-03-22 10:55:30
【问题描述】:

我有一个包含 .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":...
},
{...
}

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

【问题讨论】:

  • 能不能用 mongoimport 全部导入,然后选择性地$unset不需要的字段?
  • 我的值列表在属性内。我不认为我可以使用 $unset 删除密钥并将值保留为列表。如果可能的话,我很感兴趣。在我的示例中,我想存储具有状态和时间戳属性的 X 对象。
  • 啊,这有点复杂。你能edit你的问题来说明你的目标是什么,即数据需要采用什么格式?
  • 我用预期的格式编辑了帖子
  • 每个对象是否应该有一个单独的文档,即{"status" : 0, "timestamp": ... }作为单个文档?

标签: mongodb


【解决方案1】:

您可以将其分为两个阶段:

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

聚合命令可能如下所示:

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

这可能处理得相当快,因为​​它可以由数据库服务器上的 MongoDB 自己完成;但是,可能值得对小数据样本进行一些性能测试以找出答案。

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 2021-05-13
    • 2013-08-27
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多