mongo からのストリーミング クエリがあり、それを through2 の「スパイ」書き込み可能ストリームにパイプしています。5 つのドキュメントの小さなコレクションを含む「終了」コールバックを含め、完全に機能します。ただし、344 個のドキュメントのより大きなコレクションでは、最初の 15 個のみが通過し、その後永久にハングアップし、「終了」イベントは発生しません。MCVE は次のとおりです。
var spy = require("through2-spy").obj;
var MongoClient = require("mongodb").MongoClient;
function getStream() {
var stream = spy(function() {
console.log("@bug counting", stream.total++);
});
stream.total = 0;
return stream;
}
function onEnd() {
console.log("ended");
}
MongoClient.connect(process.argv[2], function(error, db) {
if (error) {
console.error(error);
return;
}
var stream = db.collection(process.argv[3]).find().stream();
stream
// behavior is the same with the follow line commented out or not
.on("end", db.close.bind(db))
.on("error", console.error)
.on("end", onEnd)
.pipe(getStream());
});