我在mongodb中有一个用户数据库,我想通过JSON中的REST接口导出。问题在于,在最坏的情况下,返回行的数量超过了200万。
首先我试过这个
var mongo = require('mongodb'),Server = mongo.Server,Db = mongo.Db; var server = new Server('localhost',27017,{auto_reconnect: true}); var db = new Db('tracking',server); var http = require('http'); http.createServer(function (request,response) { db.collection('users',function(err,collection) { collection.find({},cursor){ cursor.toArray(function(err,items) { output = '{"users" : ' + JSON.stringify(items) + '}'; response.setHeader("Content-Type","application/json"); response.end(output); }); }); }); }).listen(8008); console.log('Server running at localhost:8008');
当内存不足时失败。该示例使用node-mongodb本机驱动程序和基本的Http包。
Fatal error: CALL_AND_RETRY_2 Allocation Failed – process out of memory
(请注意,在实际情况下,我使用根据需要限制结果的参数,但此示例查询所有这是最坏情况下的情况,无论如何)
数据本身很简单,就像
{ “_id” : ObjectId(“4f993d1c5656d3320851aadb”),“userid” : “80ec39f7-37e2-4b13-b442-6bea57472537”,“user-agent” : “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)”,“ip” : “127.0.0.1”,“lastupdate” : 1335442716 }
我也尝试过类似的东西
while(cursor != null) { cursor.nextObject(function(err,item) { response.write(JSON.stringify(item)); }); }
但是这样也没有了。
我该怎么办?应该有一种方法来逐行流式传输数据,但是我还没有找到合适的示例。由于外部应用程序的要求,分页数据是不成问题的。我想把数据写入一个文件,然后发布,但这会导致不必要的io。
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。