Mongoose QueryStream新结果

jor*_*cke 2 streaming mongoose mongodb node.js

当新文档被另一个应用程序插入到集合中时,我正在尝试设置MongooseJS来推出整个集合(或者只是最新的项目).

我假设QueryStream是要走的路.

但是,当我启动我的简单应用程序时,它会读出一次该集合并关闭它.

当我插入新文档时没有任何反应(假设连接不再打开并寻找新结果......?)

var Orders = db.model('orders', OrderSchema);

var stream = Orders.find().stream();

stream.on('data', function(doc){
    console.log('New item!');
    console.log(doc);
}).on('error', function (error){
    console.log(error);
}).on('close', function () {
    console.log('closed');
});
Run Code Online (Sandbox Code Playgroud)

立即打印当前订单集合中的所有项目,然后打印"已关闭".当集合发生变化时,"Stream"是否应该保持打开状态以打印新数据?

我对此不了解什么MongooseJS QueryStream

PS.我的目标是最终emit通过socket.io这里演示的更新集合:Mongoose stream第一次返回少量结果

jor*_*cke 5

我发现为了使这个方法起作用,我需要将我的集合更改为capped collection:

var OrderSchema = new Mongoose.Schema({...
}, { capped: { size: 10, max: 10, autoIndexId: true }});

var Orders = db.model('orders', OrderSchema);

var stream = Orders.find().tailable().stream();

stream.on('data', function(doc){
    console.log('New item!');
    console.log(doc);
}).on('error', function (error){
    console.log(error);
}).on('close', function () {
    console.log('closed');
});
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为我现在可以MongoDB collection像处理消息队列一样,不断更新.

奇怪的是,当我把它包装在一个SocketIO事件中时,我会得到相同的倍数,documents这让我觉得还有一些我做得不对的......