@@ -281,25 +281,36 @@ var createChangeStreamCursor = function(self) {
281281 return changeStreamCursor ;
282282} ;
283283
284+ function getResumeToken ( self ) {
285+ return self . resumeToken || self . options . resumeAfter ;
286+ }
287+
288+ function getStartAtOperationTime ( self ) {
289+ const isMaster = self . serverConfig . lastIsMaster ( ) || { } ;
290+ return (
291+ isMaster . maxWireVersion && isMaster . maxWireVersion >= 7 && self . options . startAtOperationTime
292+ ) ;
293+ }
294+
284295var buildChangeStreamAggregationCommand = function ( self ) {
285296 const serverConfig = self . serverConfig ;
286297 const namespace = self . namespace ;
287298 const pipeline = self . pipeline ;
288- const resumeToken = self . resumeToken ;
289299 const options = self . options ;
290300 const cursorNamespace = self . cursorNamespace ;
291301
292- const isMaster = serverConfig . lastIsMaster ( ) || { } ;
293-
294302 var changeStreamStageOptions = {
295303 fullDocument : options . fullDocument || 'default'
296304 } ;
297305
298- if ( resumeToken || options . resumeAfter ) {
299- changeStreamStageOptions . resumeAfter = resumeToken || options . resumeAfter ;
300- } else if ( isMaster . maxWireVersion && isMaster . maxWireVersion >= 7 ) {
301- const ts = options . startAtOperationTime || self . operationTime ;
302- changeStreamStageOptions . startAtOperationTime = ts ;
306+ const resumeToken = getResumeToken ( self ) ;
307+ const startAtOperationTime = getStartAtOperationTime ( self ) ;
308+ if ( resumeToken ) {
309+ changeStreamStageOptions . resumeAfter = resumeToken ;
310+ }
311+
312+ if ( startAtOperationTime ) {
313+ changeStreamStageOptions . startAtOperationTime = startAtOperationTime ;
303314 }
304315
305316 // Map cursor options
@@ -338,6 +349,12 @@ var processNewChange = function(self, err, change, callback) {
338349 // Handle resumable MongoNetworkErrors
339350 if ( isResumableError ( err ) && ! self . attemptingResume ) {
340351 self . attemptingResume = true ;
352+
353+ if ( ! ( getResumeToken ( self ) || getStartAtOperationTime ( self ) ) ) {
354+ const startAtOperationTime = self . cursor . cursorState . operationTime ;
355+ self . options = Object . assign ( { startAtOperationTime } , self . options ) ;
356+ }
357+
341358 if ( callback ) {
342359 return self . cursor . close ( function ( closeErr ) {
343360 if ( closeErr ) {
0 commit comments