我正在使用猫鼬查询一个文档,并且希望将其通过管道传输到流中。我的数据库有多个帐户文档。如果我只是:

db.Accounts.findOne({}).exec(function(err, data){
   ...
});


它正确返回单个文档。然而,

var mongooseStream = db.Accounts.findOne({}).stream({
  transform: JSON.stringify
}),
  writeStream = require('fs').createWriteStream('accounts');

mongooseStream.pipe(writeStream);


上面这个新创建的writeStream在其中列出了每个帐户。

最后,如果我.find({}).limit(1).stream(),它将仅返回流中的一个文档。

关于为什么流findOne({})无法正常运行的任何想法?谢谢!

最佳答案

您尚未对findOne()设置任何条件,并且正在对其进行流式处理。因此,它将连续执行findOne()并将其提供给流。 findOne()的用法如下:

SchemaModel.findOne({
     //conditions
},function(){
     //this is callback
});


据我了解,您正在尝试做的是,您正在尝试仅流式处理集合中的一个文档。为此,findOne并不是您所需要的,因为在定义一组条件时,findOne用于直接从数据库中以Javascript对象的形式直接提取一个文档。

阅读:

Mongoose Queries

db.Collection.findOne()

How to use mongoose findOne

关于javascript - Mongoose findOne.stream()返回多个文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30719102/

10-11 00:59