What aggregation cursor methods are supported by Nodejs drivers?

mongodb, mongoose, node-mongodb-native, node.js

Solution

What actually gets returned from aggregate with a cursor is a node transform stream interface with a few other convenience methods, notably:

explain: [Function],
get: [Function],
getOne: [Function],
each: [Function],
next: [Function],

Which you can obtain by simply dumping the cursor object using `console.log`. Those should be self explanatory with the `get()` method being equivalent to `.toArray()`.

Since this is a standard streaming interface the methods and event handlers are available as per this interface, so with an example:

  var MongoClient = require('mongodb').MongoClient;


  MongoClient.connect("mongodb://localhost/test", function(err,db) {

    var items = [];
    var counter = 0;

    var cursor = db.collection('tags').aggregate(
      [
        { "$project": {
          "t1": 1,
          "t2": 1
        }}
      ],
      { "cursor": { "batchSize": 25 } }
    );

    console.log( cursor );

    cursor.on('data', function(data) {
      console.log( this );  // dump the current state info
      items.push( data );
      counter++;
    });

    cursor.on('end', function() {
      console.log( "Iterated " + counter + " times" );
    });

  });

The "data" event is fired with each cursor iteration and properties on the object will show whether the stream is complete or still iterating and so on.

Problem

As you know from 2.6 on Mongodb `aggregate()` operation returns a cursor, however the behavior is a bit different than the normal cursor which returns from a `find()`. I am using native mongodb nodejs driver, and could not find a proper documentation on available aggregate cursor methods. For example, one cannot run a `count()` on an aggregation cursor however there are two methods such `cursor.objsLeftInBatch()` and `cursor.itcount()` n mongo shell. I could not find any of them in the source code of nodejs native driver. What aggregation cursor methods are supported by Nodejs native driver or Mongoose?

Original source