Optional
options: EventEmitterOptionsOptional
Static
Readonly
captureStatic
captureSets or gets the default captureRejection value for all emitters.
Static
defaultStatic
Readonly
errorThis symbol shall be used to install a listener for only monitoring 'error'
events. Listeners installed using this symbol are called before the regular
'error'
listeners are called.
Installing a listener using this symbol does not change the behavior once an
'error'
event is emitted, therefore the process will still crash if no
regular 'error'
listener is installed.
Optional
[captureAdd a cursor flag to the cursor
The flag to set, must be one of following ['tailable', 'oplogReplay', 'noCursorTimeout', 'awaitData', 'partial' -.
The flag boolean value.
Set the batch size for the cursor.
The number of documents to return per batch. See command documentation.
Returns a new uninitialized copy of this cursor, with options matching those that have been set on the current instance
Rest
...args: Parameters<AbstractCursorEvents[EventKey]>Rest
Iterates over all the documents for this cursor using the iterator, callback pattern.
If the iterator returns false
, iteration will stop.
The iteration callback.
Add a geoNear stage to the aggregation pipeline
Add a group stage to the aggregation pipeline
Add a limit stage to the aggregation pipeline
Add a lookup stage to the aggregation pipeline
Map all documents using the provided function If there is a transform set on the cursor, that will be called first and the result passed to this function's transform.
The mapping transformation method.
Note Cursors use null
internally to indicate that there are no more documents in the cursor. Providing a mapping
function that maps values to null
will result in the cursor closing itself before it has finished iterating
all documents. This will not result in a memory leak, just surprising behavior. For example:
const cursor = collection.find({});
cursor.map(() => null);
const documents = await cursor.toArray();
// documents is always [], regardless of how many documents are in the collection.
Other falsey values are allowed:
const cursor = collection.find({});
cursor.map(() => '');
const documents = await cursor.toArray();
// documents is now an array of empty strings
Note for Typescript Users: adding a transform changes the return type of the iteration of this cursor, it does not return a new instance of a cursor. This means when calling map, you should always assign the result to a new variable in order to get a correctly typed cursor variable. Take note of the following example:
const cursor: FindCursor<Document> = coll.find();
const mappedCursor: FindCursor<number> = cursor.map(doc => Object.keys(doc).length);
const keyCounts: number[] = await mappedCursor.toArray(); // cursor.toArray() still returns Document[]
Add a match stage to the aggregation pipeline
Set a maxTimeMS on the cursor query, allowing for hard timeout limits on queries (Only supported on MongoDB 2.6 or higher)
Number of milliseconds to wait before aborting the query.
Add an out stage to the aggregation pipeline
Add a project stage to the aggregation pipeline
In order to strictly type this function you must provide an interface that represents the effect of your projection on the result documents.
By default chaining a projection to your cursor changes the returned type to the generic Document type. You should specify a parameterized type to have assertions on your final results.
// Best way
const docs: AggregationCursor<{ a: number }> = cursor.project<{ a: number }>({ _id: 0, a: true });
// Flexible way
const docs: AggregationCursor<Document> = cursor.project({ _id: 0, a: true });
const cursor: AggregationCursor<{ a: number; b: string }> = coll.aggregate([]);
const projectCursor = cursor.project<{ a: number }>({ _id: 0, a: true });
const aPropOnlyArray: {a: number}[] = await projectCursor.toArray();
// or always use chaining and save the final cursor
const cursor = coll.aggregate().project<{ a: string }>({
_id: 0,
a: { $convert: { input: '$a', to: 'string' }
}});
Add a redact stage to the aggregation pipeline
Optional
event: string | symbol | EventKeyOptional
Add a skip stage to the aggregation pipeline
Add a sort stage to the aggregation pipeline
Optional
options: CursorStreamOptionsOptional
Returns an array of documents. The caller is responsible for making sure that there is enough memory to store the results. Note that the array only contains partial results when this cursor had been previously accessed. In that case, cursor.rewind() can be used to reset the cursor.
Add a unwind stage to the aggregation pipeline
Set the ReadPreference for the cursor.
Set the ReadPreference for the cursor.
The new read preference for the cursor.
Static
getReturns a copy of the array of listeners for the event named eventName
.
For EventEmitter
s this behaves exactly the same as calling .listeners
on
the emitter.
For EventTarget
s this is the only way to get the event listeners for the
event target. This is useful for debugging and diagnostic purposes.
import { getEventListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
const listener = () => console.log('Events are fun');
ee.on('foo', listener);
getEventListeners(ee, 'foo'); // [listener]
}
{
const et = new EventTarget();
const listener = () => console.log('Events are fun');
et.addEventListener('foo', listener);
getEventListeners(et, 'foo'); // [listener]
}
v15.2.0
Static
listenerA class method that returns the number of listeners for the given eventName
registered on the given emitter
.
import { EventEmitter, listenerCount } from 'node:events';
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
The emitter to query
The event name
v0.9.12
Since v3.2.0 - Use listenerCount
instead.
Static
onimport { on, EventEmitter } from 'node:events';
(async () => {
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
})();
Returns an AsyncIterator
that iterates eventName
events. It will throw
if the EventEmitter
emits 'error'
. It removes all listeners when
exiting the loop. The value
returned by each iteration is an array
composed of the emitted event arguments.
An AbortSignal
can be used to cancel waiting on events:
import { on, EventEmitter } from 'node:events';
const ac = new AbortController();
(async () => {
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo', { signal: ac.signal })) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
})();
process.nextTick(() => ac.abort());
The name of the event being listened for
Optional
options: StaticEventEmitterOptionsOptional
that iterates eventName
events emitted by the emitter
v13.6.0, v12.16.0
Static
onceCreates a Promise
that is fulfilled when the EventEmitter
emits the given
event or that is rejected if the EventEmitter
emits 'error'
while waiting.
The Promise
will resolve with an array of all the arguments emitted to the
given event.
This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error'
event
semantics and does not listen to the 'error'
event.
import { once, EventEmitter } from 'node:events';
async function run() {
const ee = new EventEmitter();
process.nextTick(() => {
ee.emit('myevent', 42);
});
const [value] = await once(ee, 'myevent');
console.log(value);
const err = new Error('kaboom');
process.nextTick(() => {
ee.emit('error', err);
});
try {
await once(ee, 'myevent');
} catch (err) {
console.log('error happened', err);
}
}
run();
The special handling of the 'error'
event is only used when events.once()
is used to wait for another event. If events.once()
is used to wait for the
'error'
event itself, then it is treated as any other kind of event without
special handling:
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
once(ee, 'error')
.then(([err]) => console.log('ok', err.message))
.catch((err) => console.log('error', err.message));
ee.emit('error', new Error('boom'));
// Prints: ok boom
An AbortSignal
can be used to cancel waiting for the event:
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
Optional
options: StaticEventEmitterOptionsOptional
v11.13.0, v10.16.0
Optional
options: StaticEventEmitterOptionsOptional
Static
setimport {
setMaxListeners,
EventEmitter
} from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
Optional
n: numberA non-negative number. The maximum number of listeners per EventTarget
event.
Optional
Rest
...eventTargets: (EventEmitter<DefaultEventMap> | DOMEventTarget)[]Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n
is set as the default max for all newly created {EventTarget} and {EventEmitter}
objects.
Rest
v15.4.0
Static
Readonly
CLOSEGenerated using TypeDoc
The AggregationCursor class is an internal class that embodies an aggregation cursor on MongoDB allowing for iteration over the results returned from the underlying query. It supports one by one document iteration, conversion to an array or can be iterated as a Node 4.X or higher stream