docs: function reservoirStream(collection, size, opts) {
    opts = _defaults(opts || {}, {
      chunkSize: RESERVOIR_CHUNK_SIZE,
      promoteValues: true
    });
    var reservoir = new Reservoir(size);
  
    var stream = es.through(
      function write(data) {
        // fill reservoir with ids
        reservoir.pushSome(data);
      },
      function end() {
        // split the reservoir of ids into smaller chunks
        var chunks = _chunk(reservoir, opts.chunkSize);
        // create cursors for chunks
        var cursors = chunks.map(function(ids) {
          var cursor = collection.find({ _id: { $in: ids }}, { promoteValues: opts.promoteValues, raw: opts.raw });
          if (opts.fields) {
            cursor.project(opts.fields);
          }
          if (opts.maxTimeMS) {
            cursor.maxTimeMS(opts.maxTimeMS);
          }
          return cursor.stream();
        });
        // merge all cursors (order arbitrary) and emit docs
        es.merge(cursors).pipe(es.through(function(doc) {
          stream.emit('data', doc);
        })).on('end', function() {
          stream.emit('end');
        });
      }
    );
    return stream;
  }