Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
2 tasks done
bhanudatsinhjhala opened this issue Feb 13, 2024 · 0 comments
Open
2 tasks done
Labels
enhancement This issue is a user-facing general improvement that doesn't fix a bug or add a new feature new feature This change adds new functionality, like a new method or class

Comments

@bhanudatsinhjhala
Copy link

bhanudatsinhjhala commented Feb 13, 2024

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.'
      }
@bhanudatsinhjhala bhanudatsinhjhala added enhancement This issue is a user-facing general improvement that doesn't fix a bug or add a new feature new feature This change adds new functionality, like a new method or class labels Feb 13, 2024
@vkarpov15 vkarpov15 added this to the 7.x Unprioritized milestone Feb 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement This issue is a user-facing general improvement that doesn't fix a bug or add a new feature new feature This change adds new functionality, like a new method or class
Projects
None yet
Development

No branches or pull requests

2 participants