mongodb import xml into mongodb

mongodb import xml into mongodb

本文关键字:mongodb into import xml      更新时间:2023-09-26

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

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

在这里,我从这个大文件中附上xmlcut(前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>、exlude <、> 等<text></text>部分中提取单词,然后将单词分开并将它们使用 pymongo 或 js 上传到 mongodb。

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

编辑

要保存所有这些数据,请将它们保存在 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'

我使用的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>

我可以使用带有mongodbxml-stream导入它

请参阅: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');
});