在 Meteor 中,如何从集合的查找诅咒器中获取节点读取流?



在Meteor中,在服务器端,我想在Collection上使用.find()函数,然后从返回的光标中获取Node ReadStream接口。我已经尝试使用.stream()在光标上,如mongoDB文档中所述。然而,我得到的错误"对象[对象对象]没有方法'流'",所以它看起来像流星集合没有这个选项。有没有办法从流星集合的光标中获得流?

我试图导出一些数据到CSV,我想管道数据直接从集合流到CSV解析器,然后进入响应返回给用户。我能够从我们正在使用的Router包中获取响应流,除了从集合中获取流之外,它都在工作。手动从查找中获取数组并将其推入流将破坏流的目的,因为它会将所有内容放入内存中。我想我的另一个选择是在集合上使用foreach并将行逐个推入流,但是当我可以直接通过解析器对其进行转换时,这似乎很脏。

下面是我尝试做的一些示例代码:

response.writeHead(200,{'content-type':'text/csv'});
// Set up a future
var fut = new Future();
var users = Users.find({}).stream();
CSV().from(users)
.to(response)
.on('end', function(count){
    log.verbose('finished csv export');
    response.end();
    fut.ret();
});
return fut.wait();

您是否尝试过创建一个自定义函数并管道到它?

虽然这只在Users.find()支持.pipe()的情况下才有效(同样,只在Users。查找继承自node.js的streamble对象

有点像

var stream = require('stream')
var util = require('util')
streamreader = function (){
  stream.Writable.call(this)
  this.end = function() {
     console.log(this.data) //this.data contains raw data in a string so do what you need to to make it usable, i.e, do a split on ',' or something or whatever it is you need to make it usable
     db.close()
  })
}
util.inherits(streamreader,stream.Writeable)
stream.prototype._write = function (chunk, encoding, callback) {
  this.data = this.data + chunk.toString('utf8')
  callback()
}

Users.find({}).pipe(new streamReader())

相关内容

  • 没有找到相关文章

最新更新