There are actually a few things here. The first noteworthy .cursor() is to use .cursor() instead of .stream() , as indicated in the failure warning, which is issued when used differently:
DeprecationWarning: Mongoose: Query.prototype.stream () is deprecated in mongoose> = 4.5.0, use Query.prototype.cursor () instead
The second noteworthy thing is that, as stated in the .cursor() documentation, now this returns the wrapped stream interface directly from the main Driver. Therefore, it is recommended to use modern .addCursorFlag() instead of .tailable() from mongoose Query .
Once both of these measures are installed, I see that the idle processor for the mongod and node processes drops to 0% between update intervals.
It is best simulated with the following listing.
const mongoose = require('mongoose'), Schema = mongoose.Schema; mongoose.Promise = global.Promise; mongoose.set('debug',true); const uri = 'mongodb://localhost/tailing', options = { useMongoClient: true }; const subSchema = new Schema({ name: String },{ capped: { size: 1024, max: 1000 } }); const Sub = mongoose.model('Sub', subSchema); function log(data) { console.log(JSON.stringify(data, undefined, 2)) } (async function() { try { const conn = await mongoose.connect(uri,options);
The usual old top pin, captured as the actual record, takes place:
top - 21:38:29 up 12 days, 1:23, 3 users, load average: 0.06, 0.03, 0.04 Tasks: 116 total, 2 running, 114 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 98.6 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 2045968 total, 207452 free, 813908 used, 1024608 buff/cache KiB Swap: 2097148 total, 2097124 free, 24 used. 1028156 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1257 mongodb 20 0 1946896 487336 34892 S 0.7 23.8 130:37.67 mongod 28233 neillunn 20 0 1021460 41920 22996 S 0.3 2.0 0:00.67 node 30956 neillunn 20 0 101472 4384 3352 S 0.3 0.2 0:20.95 sshd