我在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({}, function(err, 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包.
致命错误:调用和重试分配失败-进程内存不足
(请注意,在实际场景中,我使用的参数会根据需要限制结果,但本例会查询所有这些参数,这是最糟糕的场景)
数据本身很简单,比如
{"_id":ObjectId("4F993D1C56D3320851AADB"),"userid:"80ec39f7-37e2-4b13-b442-6BEA5742537","用户代理":"Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;.NET CLR 1.1.4322)","ip:"127.0.0.1","最新更新":1335442716}
我也试过类似的方法
while(cursor != null)
{
cursor.nextObject(function(err, item) {
response.write(JSON.stringify(item));
});
}
但那也没什么记忆了.
我该怎么做?应该有一种方法来逐行传输数据,但我还没有找到合适的例子.由于外部应用程序的要求,分页数据是不可能的.我曾想过将数据写入一个文件,然后将其发布,但这会导致不必要的io.