Automattic/mongoose · error · MongooseError

Model.validate() no longer accepts a callback

Error message

Model.validate() no longer accepts a callback

What it means

Error "Model.validate() no longer accepts a callback" thrown in Automattic/mongoose.

Source

Thrown at lib/model.js:4302

 *     // The following will still throw an error because the value of `age` cannot be
 *     // casted to a number. Remove the `age` property before calling `validate()`.
 *     await Model.validate({ name: 'Test', age: 'not a number' }, ['name']);
 *
 * @param {object} obj
 * @param {object|Array|string} pathsOrOptions
 * @param {object} [context]
 * @return {Promise<object>} casted and validated copy of `obj` if validation succeeded
 * @api public
 */

Model.validate = async function validate(obj, pathsOrOptions, context) {
  if ((arguments.length < 3) || (arguments.length === 3 && typeof arguments[2] === 'function')) {
    // For convenience, if we're validating a document or an object, make `context` default to
    // the model so users don't have to always pass `context`, re: gh-10132, gh-10346
    context = obj;
  }
  if (typeof context === 'function' || typeof arguments[3] === 'function') {
    throw new MongooseError('Model.validate() no longer accepts a callback');
  }

  let schema = this.schema;
  const discriminatorKey = schema.options.discriminatorKey;
  if (schema.discriminators != null && obj != null && obj[discriminatorKey] != null) {
    schema = getSchemaDiscriminatorByValue(schema, obj[discriminatorKey]) || schema;
  }
  let paths = Object.keys(schema.paths);

  if (pathsOrOptions != null) {
    const _pathsToValidate = typeof pathsOrOptions === 'string' ? new Set(pathsOrOptions.split(' ')) : Array.isArray(pathsOrOptions) ? new Set(pathsOrOptions) : new Set(paths);
    paths = paths.filter(p => {
      if (pathsOrOptions.pathsToSkip) {
        if (Array.isArray(pathsOrOptions.pathsToSkip)) {
          if (pathsOrOptions.pathsToSkip.find(x => x == p)) {
            return false;
          }
        } else if (typeof pathsOrOptions.pathsToSkip == 'string') {

View on GitHub (pinned to 49cdab0136)

When it happens

Trigger: Thrown at lib/model.js:4302 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Automattic/mongoose@49cdab0136 (2026-08-21). Data as JSON: /api/errors/bb942a461b75c66f. Report an issue: GitHub.