MongoError:没有更多文件在尾巴光标

我有一个封顶的集合,我试图尾巴使用mongoose 。 当所有的文件用尽或者根本没有时,可追踪的stream出错。

mongoose模式

 var photoSchema = new Schema({ name: String, operations: Schema.Types.Mixed, }, { capped: { size: 300 * 500, max: 500, autoIndexId: true } }); 

履行

 var RawPhoto = mongoose.model('RawPhoto', photoSchema); var ProcessedPhoto = mongoose.model('ProcessedPhoto', photoSchema) var ProcessedPhoto = mongoose.model('ProcessedPhoto', photoSchema) var processedPhotoStream = ProcessedPhoto.find().tailable(true, {awaitdata: true, numberOfRetries: Number.MAX_VALUE}).stream(); processedPhotoStream.on('data', function(photo){ console.log(photo.name); }).on('error', function(error){ console.error(error); }).on('close', function(){ console.log("processed photo stream closed") }); 

在我的控制台我得到一个MongoError: No more documents in tailed cursor和我自己的消息processed photo stream closed 。 由于mongoose和最新版本的MongoDB不兼容,我看到过去有人遇到麻烦,但我仍然有这个问题。

您的光标标记不正确,因此被忽略。 你真的只想用“大写'D'”来awaitData

 var processedPhotoStream = ProcessedPhoto.find().tailable(true, { awaitData: true }).stream(); 

addCursorFlag的本地驱动程序文档中列出了有效的选项

要设置的标志必须是['tailable','oplogReplay','noCursorTimeout','awaitData','partial']之一。


简单的列表没有问题

 var async = require('async'), mongoose = require('mongoose'), Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/capped'); mongoose.set('debug',true); var photoSchema = new Schema({ "name": String }, { "capped" : { "size": 500 * 1024, "max": 500 } }); var Photo = mongoose.model('Photo',photoSchema); var stream = Photo.find().tailable(true, { awaitData: true }).stream(); stream.on('data',function(data) { console.log(data); }); stream.on('err',function(err) { console.error(err); }); stream.on('close',function() { console.log('done'); }); setInterval(function() { Photo.create({ "name": "Ted" },function(err,photo) { }); },2000); 

不断的输出:

 Mongoose: photos.find({}) { awaitData: true, tailable: true, fields: undefined } Mongoose: photos.insert({ name: 'Ted', _id: ObjectId("5715af20daa62598059adaf1"), __v: 0 }) { __v: 0, name: 'Ted', _id: 5715af20daa62598059adaf1 } Mongoose: photos.insert({ name: 'Ted', _id: ObjectId("5715af23daa62598059adaf2"), __v: 0 }) { __v: 0, name: 'Ted', _id: 5715af23daa62598059adaf2 } Mongoose: photos.insert({ name: 'Ted', _id: ObjectId("5715af25daa62598059adaf3"), __v: 0 }) { __v: 0, name: 'Ted', _id: 5715af25daa62598059adaf3 } 

我得到这个错误时,我创build了一个可用的游标不存在的集合。 在我的情况下,我创build了一个集合“封顶”,但mongoose在模型名称的末尾添加了“s”。 由于集合成为复数,尾标的光标正在寻找集合名称“cappeds”