MongoError:尾标中没有更多文档
MongoError: No More Documents in Tailed Cursor
本文关键字:文档 MongoError 更新时间:2023-09-26
我有一个带上限的集合,我正试图使用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
。我看到人们在过去因为猫鼬和最新版本的MongoDB之间的不兼容而遇到了麻烦,但我仍然有这个问题。
您的光标标志不正确,因此被忽略。你真的只想要带"大写'D'"的awaitData
:
var processedPhotoStream = ProcessedPhoto.find().tailable(true,
{ awaitData: true }).stream();
addCursorFlag
的本机驱动程序文档中列出了有效选项
要设置的标志必须是以下之一["可用"、"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 }
当我在一个不存在的集合上创建一个可裁剪的游标时,我遇到了这个错误。在我的例子中,我创建了一个集合"caped",但mongoose在模型名称的末尾添加了"s"。由于集合变为复数,尾部光标正在查找集合名称"cappeds"
相关文章:
- 使用promise和mongoose对文档进行排序
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Ajax请求文档就绪会导致jquery加载缓慢
- MongoDB (php) - 以数组而不是多个属性的形式返回文档属性
- 谷歌文档表面引擎
- 来自文档或下一个静态父级的事件委派
- 如何将childNodes用于XML文档
- 文档就绪提供了错误的选择器高度
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- BrowserId登录请求在文档加载时被调用
- 从Javascript和Php变量创建Html模板文档
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在jquery文档准备好之前加载Modernizr
- 如何判断何时将dom节点添加到文档中
- 无法获取文档.GetElementById工作正常
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- MongoError:尾标中没有更多文档