【问题标题】:mongodb import xml into mongodbmongodb 将 xml 导入 mongodb
【发布时间】:2015-01-07 18:18:45
【问题描述】:

我在将大 xml 文件 (1.3 gb) 导入 mongodb 以便以 map & reduce 方式搜索最常用词时遇到问题。

http://dumps.wikimedia.org/plwiki/20141228/plwiki-20141228-pages-articles-multistream.xml.bz2

在这里,我从这个大文件中附上 xml 剪切(前 10 000 行):

http://www.filedropper.com/text2

我知道我不能直接将xml导入mongodb。我使用了一些工具来做到这一点。我使用了一些python脚本,但都失败了。

我应该使用哪个工具或脚本?什么应该是关键和价值? 我认为找到最频繁世界的最佳解决方案就是这个。

(_id : id, value: word )

然后我会总结文档示例中的所有元素:

http://docs.mongodb.org/manual/core/map-reduce/

任何线索将不胜感激,但是如何将此文件导入 mongodb 以拥有这样的集合?

(_id : id, value: word )

如果您有任何想法,请分享。

已编辑 经过研究,我会用python或者js来完成这个任务。

我只会提取/<page><revision><text></text>部分中的单词,排除&lt,&gt等,然后将单词分开并使用pymongo或js上传到mongodb。

所以有几页有修订和文本。

编辑

【问题讨论】:

  • 有谁知道如何将这么大的文件,文本部分,转换成csv或json
  • 大文件的问题,可以用fileinput解决,因为你一次只加载一行,而不是整个文件都加载到内存中,然后你决定什么时候写到另一个文件(csv 或 json)。
  • 你能举个例子吗?
  • 我做了这个,因为生成的文件会很大,所以使用open将使用所有内存,github.com/abdelouahabb/kouider-ezzadam/blob/master/…
  • 我很努力地这样做了,还有stackoverflow.com/questions/19286118/… 并得到了内存错误....

标签: javascript python xml mongodb


【解决方案1】:

要保存所有这些数据,请将它们保存在Gridfs

而转换xml最简单的方法是使用这个工具将其转换为json并保存:

https://stackoverflow.com/a/10201405/861487

import xmltodict

doc = xmltodict.parse("""
... <mydocument has="an attribute">
...   <and>
...     <many>elements</many>
...     <many>more elements</many>
...   </and>
...   <plus a="complex">
...     element as well
...   </plus>
... </mydocument>
... """)

doc['mydocument']['@has']
Out[3]: u'an attribute'

【讨论】:

  • 感谢您的帮助,但它不起作用。我什至安装了两个 xmltodict 模块(你包含的一个和 2 个官方但“对象没有属性解析......”我想我应该在上传之前提取和准备数据。诸如此类:stackoverflow.com/questions/18595791/…
  • 我刚刚测试了它,它有效,示例有效吗?
  • 是的,它有效。我对如何导入 mongodb 有不同的想法。请看一下:stackoverflow.com/questions/27841981/…。如果解决了,我会处理的。
【解决方案2】:

我正在使用的 XML 文件是这样的:

<labels>
     <label>
          <name>Bobby Nice</name>
          <urls>
               <url>www.examplex.com</url>
               <url>www.exampley.com</url>
               <url>www.examplez.com</url>
          </urls>
     </label>
     ...
</labels>

我可以使用xml-streammongodb 导入它

见:https://github.com/assistunion/xml-stream

代码:

var XmlStream = require('xml-stream');
// Pass the ReadStream object to xml-stream
var stream = fs.createReadStream('20080309_labels.xml');
var xml = new XmlStream(stream);

var i = 1;
var array = [];
xml.on('endElement: label', function(label) {
  array.push(label);
  db.collection('labels').update(label, label, { upsert:true }, (err, doc) => {
    if(err) {
      process.stdout.write(err + "\r");
    } else {
      process.stdout.write(`Saved ${i} entries..\r`);
      i++;
    }
  });
});

xml.on('end', function() {
  console.log('end event received, done');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2015-09-23
    • 2014-04-28
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多