title: mongoDB Aggregation and cursor - returning a promise that is not iterable
body: <p>Given:</p>
  <pre><code>Node: 16.4.2
  mongoose: 6.1.9
  mongoDB driver: 4.2.2
  mongoDB: 4.0.18
  </code></pre>
  <p>Using the <code>cursor</code> call to an aggregation query fails to produce the expected result and instead returns a promise. The aggregate query should return 30k records.</p>
  <pre><code>const cursor = Model.aggregate([{ $match: { ownerId: $someId } }]).allowDiskUse(true)
  .cursor({batchSize: 100}); // type of ownerId is string
  </code></pre>
  <p>I have used variations on iterating through the cursor without any success.</p>
  <pre><code>cursor.next((doc) =&gt; {
       console.log('doc', doc);
  })
  </code></pre>
  <p>Or</p>
  <pre><code>for await (const doc of cursor) {
       console.log('doc', doc);
  }
  </code></pre>
  <p>Or</p>
  <pre><code>await cursor.eachAsync((doc) =&gt; {
       console.log('doc', doc);
  });
  </code></pre>
  <p>Or</p>
  <pre><code>let doc
  while ((doc = await cursor.next())) {
      console.log(doc._id)
  }
  </code></pre>
  <p>Any feed-back is greatly appreciated!</p>
  <p>Note: adding an <code>exec()</code> to the aggregate would result in the following:</p>
  <pre><code>const cursor = Listing.aggregate(query).allowDiskUse(true).cursor({batchSize: 100}).exec();
  
  &lt;rejected&gt; TypeError: Listing.aggregate(...).allowDiskUse(...).cursor(...).exec is not a function
  </code></pre>