applyWriteConcern.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. 'use strict';
  2. const utils = require('../../utils');
  3. module.exports = function applyWriteConcern(schema, options) {
  4. if (options.writeConcern != null) {
  5. return;
  6. }
  7. // Don't apply default write concern to operations in transactions,
  8. // because setting write concern on an operation in a transaction is an error
  9. // See: https://www.mongodb.com/docs/manual/reference/write-concern/
  10. if (options?.session?.transaction) {
  11. return;
  12. }
  13. const writeConcern = schema.options.writeConcern ?? {};
  14. if (utils.hasOwnKeys(writeConcern)) {
  15. options.writeConcern = {};
  16. if (!('w' in options) && writeConcern.w != null) {
  17. options.writeConcern.w = writeConcern.w;
  18. }
  19. if (!('j' in options) && writeConcern.j != null) {
  20. options.writeConcern.j = writeConcern.j;
  21. }
  22. if (!('wtimeout' in options) && writeConcern.wtimeout != null) {
  23. options.writeConcern.wtimeout = writeConcern.wtimeout;
  24. }
  25. }
  26. else {
  27. if (!('w' in options) && writeConcern.w != null) {
  28. options.w = writeConcern.w;
  29. }
  30. if (!('j' in options) && writeConcern.j != null) {
  31. options.j = writeConcern.j;
  32. }
  33. if (!('wtimeout' in options) && writeConcern.wtimeout != null) {
  34. options.wtimeout = writeConcern.wtimeout;
  35. }
  36. }
  37. };