File tree Expand file tree Collapse file tree 2 files changed +56
-0
lines changed
fundamentals/crud/read-operations Expand file tree Collapse file tree 2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change @@ -68,6 +68,28 @@ async function close(myColl) {
68
68
await cursor . close ( ) ;
69
69
// end close cursor example
70
70
}
71
+ // Abort in-progress operations
72
+ async function abort ( myColl ) {
73
+ // start abort cursor example
74
+ const controller = new AbortController ( ) ;
75
+ const { signal } = controller ;
76
+
77
+ process . on ( 'SIGINT' , ( ) => controller . abort ( new Error ( '^C pressed' ) ) ) ;
78
+
79
+ try {
80
+ const cursor = myColl . find ( { } , { signal } ) ;
81
+ for await ( const doc of cursor ) {
82
+ console . log ( doc ) ;
83
+ }
84
+ } catch ( error ) {
85
+ if ( error === signal . reason ) {
86
+ console . error ( 'Operation aborted:' , error ) ;
87
+ } else {
88
+ console . error ( 'Unexpected error:' , error ) ;
89
+ }
90
+ }
91
+ // end abort cursor example
92
+ }
71
93
72
94
async function run ( ) {
73
95
try {
@@ -81,6 +103,7 @@ async function run() {
81
103
await fetchAll ( orders ) ;
82
104
await rewind ( orders ) ;
83
105
await count ( orders ) ;
106
+ await abort ( orders ) ;
84
107
} finally {
85
108
await client . close ( ) ;
86
109
}
Original file line number Diff line number Diff line change @@ -165,3 +165,36 @@ and the {+mdb-server+}:
165
165
:language: javascript
166
166
:start-after: start close cursor example
167
167
:end-before: end close cursor example
168
+
169
+ Abort
170
+ ~~~~~
171
+
172
+ You can cancel cursor operations by using an `abort signal
173
+ <{+api+}/types/Abortable.html>`__. This can help you manage your resources by
174
+ releasing memory and network resources used by the cursor if they're no longer
175
+ needed.
176
+
177
+ .. note::
178
+
179
+ This feature is experimental. Aborting a signal closes a connection, which
180
+ might cause unnecessary connection reestablishment.
181
+
182
+ You can pass the ``signal`` command to the following methods:
183
+
184
+ - ``collection.find()``
185
+ - ``collection.findOne()``
186
+ - ``collection.aggregate()``
187
+ - ``collection.countDocuments()``
188
+ - ``db.listCollections()``
189
+ - ``db.command()``
190
+
191
+ To use an abort signal, create an ``AbortController`` instance and extract the
192
+ ``signal`` from the controller. In this code example, the process listens for a
193
+ ``SIGINT`` (``Ctrl+C``) to trigger the ``abort()`` method. You can pass the
194
+ ``signal`` option to the ``find()`` method to abort the cursor operation if the
195
+ signal triggers, as shown in the following example:
196
+
197
+ .. literalinclude:: /code-snippets/crud/cursor.js
198
+ :language: javascript
199
+ :start-after: start abort cursor example
200
+ :end-before: end abort cursor example
You can’t perform that action at this time.
0 commit comments