【问题标题】:Mongoose findOne.stream() returning more than one documentMongoose findOne.stream() 返回多个文档
【发布时间】:2015-08-23 12:10:28
【问题描述】:

我正在使用 mongoose 来查询一个文档,并且我想将它通过管道传输到流中。我的数据库有多个帐户文件。如果我只是:

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({}) 没有按我预期的那样工作有什么想法吗?谢谢!

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您没有对findOne() 设置任何条件,而且您正在流式传输它。因此,它不断地执行findOne(),然后将其提供给流。 findOne() 用法如下:

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

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

    阅读:

    Mongoose Queries

    db.Collection.findOne()

    How to use mongoose findOne

    【讨论】:

    • 即使上面代码中的条件为空,它也会使用回调方法返回一个文档。我知道这不是将一个文档写入流的最佳方法,但我仍然对为什么它返回多个文档/连续运行 findOne 感到困惑(即使指定了条件)
    • 是的,它返回一个文档。但请注意,您是在此处流式传输数据。
    猜你喜欢
    • 2019-07-15
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2020-11-12
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多