diff --git a/src/operations/delete.ts b/src/operations/delete.ts index ccdfd1c80b6..127d5d3f515 100644 --- a/src/operations/delete.ts +++ b/src/operations/delete.ts @@ -90,10 +90,14 @@ export class DeleteOperation extends CommandOperation { : undefined; } - const unacknowledgedWrite = this.writeConcern && this.writeConcern.w === 0; - if (unacknowledgedWrite || maxWireVersion(server) < 5) { - if (this.statements.find((o: Document) => o.hint)) { - callback(new MongoCompatibilityError(`Servers < 3.4 do not support hint on delete`)); + if (maxWireVersion(server) < 9) { + const hintPresent = this.statements.some(o => o.hint); + const unacknowledgedWrite = this.writeConcern && this.writeConcern.w === 0; + + if (hintPresent && unacknowledgedWrite) { + callback( + new MongoCompatibilityError(`Servers < 4.4 do not support hint on unacknowledged delete`) + ); return; } } diff --git a/src/operations/update.ts b/src/operations/update.ts index 43760c14314..615d090a142 100644 --- a/src/operations/update.ts +++ b/src/operations/update.ts @@ -122,10 +122,14 @@ export class UpdateOperation extends CommandOperation { return; } - const unacknowledgedWrite = this.writeConcern && this.writeConcern.w === 0; - if (unacknowledgedWrite || maxWireVersion(server) < 5) { - if (this.statements.find((o: Document) => o.hint)) { - callback(new MongoCompatibilityError(`Servers < 3.4 do not support hint on update`)); + if (maxWireVersion(server) < 8) { + const hintPresent = this.statements.some(o => o.hint); + const unacknowledgedWrite = this.writeConcern && this.writeConcern.w === 0; + + if (hintPresent && unacknowledgedWrite) { + callback( + new MongoCompatibilityError(`Servers < 4.2 do not support hint on unacknowledged update`) + ); return; } }