Javascript mongodb将xml导入mongodb
我无法将大xml文件(1.3 gb)导入mongodb,以便以map&reduce方式搜索最频繁的单词 在这里,我附上从这个大文件中剪下的xml(前10000行):Javascript mongodb将xml导入mongodb,javascript,python,xml,mongodb,Javascript,Python,Xml,Mongodb,我无法将大xml文件(1.3 gb)导入mongodb,以便以map&reduce方式搜索最频繁的单词 在这里,我附上从这个大文件中剪下的xml(前10000行): http://www.filedropper.com/text2 我知道我不能直接将xml导入mongodb。我用了一些工具来做。我使用了一些python脚本,但都失败了 我应该使用哪个工具或脚本?什么应该是键和值? 我认为找到最频繁世界的最佳解决方案是这样 (_id : id, value: word ) 然后我将对所有元素
http://www.filedropper.com/text2
我知道我不能直接将xml导入mongodb。我用了一些工具来做。我使用了一些python脚本,但都失败了
我应该使用哪个工具或脚本?什么应该是键和值?
我认为找到最频繁世界的最佳解决方案是这样
(_id : id, value: word )
然后我将对所有元素求和,如示例中所示:
如果有任何线索,我们将不胜感激,但如何将此文件导入mongodb以获得这样的集合呢
(_id : id, value: word )
如果你有任何想法,请分享
编辑
经过研究,我会使用python或js来完成这项任务
我将只提取
部分中/
下的单词,排除<、>等,然后分离单词并使用pymongo或js将它们上传到mongodb
所以有几页有修订和文本
已编辑要保存所有这些数据,请将它们保存在
Gridfs
转换xml
最简单的方法是使用此工具将其转换为json
并保存:
导入xmltodict
doc=xmltodict.parse(“”)
...
...
…元素
…更多元素
...
...
…元素也是
...
...
... """)
doc['mydocument']['@has']
Out[3]:u'an属性'
我使用的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>
谢谢你的帮助,但这不起作用。我甚至安装了两个xmltodict模块(包括一个模块和两个官方模块,但“对象没有atribute解析…”我想我应该在上传之前提取和准备数据。比如:我刚刚测试了它,它工作了,这个例子工作了吗?是的,它工作了。我对如何导入mongodb有不同的想法。请看一看:,如果问题解决了,我会处理。有人知道如何将这么大的文件、文本部分转换成csv或JSON吗大文件的问题可以通过
fileinput
解决,因为您一次只加载一行,而不是将整个文件加载到内存中,然后您可以决定何时写入另一个文件(csv或json).你能给我举个例子吗?我做了这个,因为生成的文件非常大,然后使用open
将使用所有内存,我尝试这样做,也得到了内存错误。。。。
<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>
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');
});