Skip to content

Create mongoose validationError object similar to mongodb error in insertMany #14351

@bhanudatsinhjhala

Description

@bhanudatsinhjhala

Prerequisites

  • I have written a descriptive issue title
  • I have searched existing issues to ensure the feature has not already been requested

🚀 Feature Proposal

In mongoose, when we use insertMany with {ordered:false, rawResult: true, throwValidationError: true} , it return this type of error when there are only mongoose validation error.

{
        "acknowledged": true,
        "insertedCount": 0,
        "insertedIds": {},
        "mongoose": {
            "validationErrors": [
                {
                    "errors": {
                        "requiredField": {
                            "name": "ValidatorError",
                            "message": "requiredField number is required.",
                            "properties": {
                                "message": "requiredField number is required.",
                                "type": "required",
                                "path": "requiredField"
                            },
                            "kind": "required",
                            "path": "requiredField"
                        }
                    },
                    "_message": "User validation failed",
                    "name": "ValidationError",
                    "message": "User validation failed: requiredField: requiredField number is required."
                },
                {
                    "errors": {
                        "title": {
                            "name": "ValidatorError",
                            "message": "Title is required.",
                            "properties": {
                                "message": "Title is required.",
                                "type": "required",
                                "path": "title"
                            },
                            "kind": "required",
                            "path": "title"
                        }
                    },
                    "_message": "User validation failed",
                    "name": "ValidationError",
                    "message": "User validation failed: title: Title is required."
                }
            ]
        }
    }

now mongoose does not provide on which index this validation error occur or the doc details which was inserted just like mongodb provides for insertMany. Added mongodb error in motiviation section.

Motivation

{
  code: 11000,
  writeErrors: [
    {
      err: {
        index: 0,
        code: 11000,
        errmsg: 'E11000 duplicate key error collection: User index: requiredField dup key: { requiredField: "acc123234jkhaksd" }',
        op: {
         title: 'title1',
            requiredField: 'acc123234jkhaksd',
            status: 'pending',
            isActive: false,
            isDownload: false,
            isDeleted: false,
            createdAt: '2024-02-13T18:11:25.306Z',
            updatedAt: '2024-02-13T18:11:25.306Z'
        }
      },
      index: 1
    }
  ],
  result: {
    insertedCount: 0,
    matchedCount: 0,
    modifiedCount: 0,
    deletedCount: 0,
    upsertedCount: 0,
    upsertedIds: {},
    insertedIds: { '0': '65cbb0cd3e005278a3235fa6' }
  },
  results: [
    {
      errors: {
        requiredField: {
          name: 'ValidatorError',
          message: 'requiredField number is required.',
          properties: {
            message: 'requiredField number is required.',
            type: 'required',
            path: 'requiredField'
          },
          kind: 'required',
          path: 'requiredField'
        }
      },
      _message: 'User validation failed',
      name: 'ValidationError',
      message: 'User validation failed: requiredField: requiredField number is required.'
    },
    {
      err: {
        index: 0,
        code: 11000,
        errmsg: 'E11000 duplicate key error collection: User index: requiredField dup key: { requiredField: "acc123234jkhaksd" }',
        op: {
         title: 'title1',
            requiredField: 'acc123234jkhaksd',
            status: 'pending',
            isActive: false,
            isDownload: false,
            isDeleted: false,
            createdAt: '2024-02-13T18:11:25.306Z',
            updatedAt: '2024-02-13T18:11:25.306Z'
        }
      },
      index: 1
    }
  ],
  insertedDocs: [],
  mongoose: {
    validationErrors: [
      {
        errors: {
          requiredField: {
            name: 'ValidatorError',
            message: 'requiredField number is required.',
            properties: {
              message: 'requiredField number is required.',
              type: 'required',
              path: 'requiredField'
            },
            kind: 'required',
            path: 'requiredField'
          }
        },
        _message: 'User validation failed',
        name: 'ValidationError',
        message: 'User validation failed: requiredField: requiredField number is required.'
      }
    ],
    results: [
      {
        errors: {
          requiredField: {
            name: 'ValidatorError',
            message: 'requiredField number is required.',
            properties: {
              message: 'requiredField number is required.',
              type: 'required',
              path: 'requiredField'
            },
            kind: 'required',
            path: 'requiredField'
          }
        },
        _message: 'User validation failed',
        name: 'ValidationError',
        message: 'User validation failed: requiredField: requiredField number is required.'
      },
      {
        err: {
          index: 0,
          code: 11000,
          errmsg: 'E11000 duplicate key error collection: User index: requiredField dup key: { requiredField: "acc123234jkhaksd" }',
          op: {
            title: 'title1',
            requiredField: 'acc123234jkhaksd',
            status: 'pending',
            isActive: false,
            isDownload: false,
            isDeleted: false,
            createdAt: '2024-02-13T18:11:25.306Z',
            updatedAt: '2024-02-13T18:11:25.306Z'
          }
        },
        index: 1
      }
    ]
  }
}

here I can get the index if there is mongodb error with validationError. but still can not get the doc details which was validated.

Example

current validationError :

{
        errors: {
          requiredField : {
            name: 'ValidatorError',
            message: 'requiredField number is required.',
            properties: {
              message: 'requiredField number is required.',
              type: 'required',
              path: 'requiredField'
            },
            kind: 'required',
            path: 'requiredField'
          }
        },
        _message: 'User validation failed',
        name: 'ValidationError',
        message: 'User validation failed: requiredField: requiredField number is required.'
      }

expected validationError in insertMany :

{
        errors: {
          requiredField : {
            name: 'ValidatorError',
            message: 'requiredField is required.',
            properties: {
              message: 'requiredField is required.',
              type: 'required',
              path: 'requiredField '
            },
            kind: 'required',
            path: 'requiredField'
          }
        },
        doc:{
            title: 'title1',
            requiredField: 'acc123234jkhaksd',
            status: 'pending',
            isActive: false,
            isDownload: false,
            isDeleted: false,
            createdAt: '2024-02-13T18:11:25.306Z',
            updatedAt: '2024-02-13T18:11:25.306Z'
}
        index: 2
        _message: 'requiredField validation failed',
        name: 'ValidationError',
        message: 'requiredField validation failed: requiredField: requiredField number is required.'
      }

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementThis issue is a user-facing general improvement that doesn't fix a bug or add a new featurenew featureThis change adds new functionality, like a new method or class

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions