mongo icon indicating copy to clipboard operation
mongo copied to clipboard

Upstream the errors properly

Open devvaneio opened this issue 3 years ago • 2 comments

Hi, congrats on the project.

I'm having a hard time trying to get errors from the driver, please take a look:

https://github.com/denodrivers/mongo/blob/d5445a476308a6ded290ded326654aa4c92e5e76/src/collection/collection.ts#L191

Could we replace that by the following:

 const [error] = writeErrors; 

There's no reason to not upstream the entire error. I tested it by changing the cache file.

Before:

MongoError: "Document failed validation"
    at Collection.insertMany (https://deno.land/x/[email protected]/src/collection/collection.ts:192:13)
    at async Collection.insertOne (https://deno.land/x/[email protected]/src/collection/collection.ts:149:29)
    at async createCampaign (file:///home/jamal/Desktop/side-projects/satiro.co/core/services/create-campaign.service.ts:10:17)
    at async Server.<anonymous> (file:///home/jamal/Desktop/side-projects/satiro.co/functions/create-campaign.function.ts:20:24)
    at async Server.#respond (https://deno.land/[email protected]/http/server.ts:298:18)

Now:

Error: MongoError: {"index":0,"code":121,"errInfo":{"failingDocumentId":"62ef419eb11a449f45637eed","details":{"operatorName":"$jsonSchema","schemaRulesNotSatisfied":[{"operatorName":"required","specifiedAs":{"required":["id","influencer","product","status","expiredAt","affiliateLink"]},"missingProperties":["id"]}]}},"errmsg":"Document failed validation"}
    at Collection.insertMany (https://deno.land/x/[email protected]/src/collection/collection.ts:192:13)
    at async Collection.insertOne (https://deno.land/x/[email protected]/src/collection/collection.ts:149:29)
    at async createCampaign (file:///home/jamal/Desktop/side-projects/satiro.co/core/services/create-campaign.service.ts:10:17)
    at async Server.<anonymous> (file:///home/jamal/Desktop/side-projects/satiro.co/functions/create-campaign.function.ts:20:24)
    at async Server.#respond (https://deno.land/[email protected]/http/server.ts:298:18)

With that, I can parse the errors and give some hints to solve the problem when the user is trying to save the document with the wrong schema or handle errors accordingly with its error code.

Update: We also need to add the errInfo to the class just like the nodejs driver: https://github.com/mongodb/node-mongodb-native/blob/417655ac9d87c1c9ca255dfcc81ca828ffde731a/src/error.ts#L171

devvaneio avatar Aug 07 '22 04:08 devvaneio

we could also wrap the extra details in a cause error image

lucsoft avatar Aug 07 '22 08:08 lucsoft

Hi, first of thank you for the library. Makes life easier working with the mongo on Deno. I am working on the app, which requires the collection validationSchema. As per the new Mongo DB update, the details of this error are sent through the errorInfo field, which is very helpful. can you please help with entire details. Thank you !

{
   "code": 121,
   "errmsg": "Document failed validation",
   "errInfo": {
       "failingDocumentId": ObjectId("5fe0eb9642c10f01eeca66a9"),
       "details": {
           "operatorName": "$jsonSchema",
           "schemaRulesNotSatisfied": [
               {
                   "operatorName": "properties",
                   "propertiesNotSatisfied": [
                       {
                           "propertyName": "price",
                           "details": [
                               {
                                   "operatorName": "minimum",
                                   "specifiedAs": {
                                       "minimum": 0
                                   },
                                   "reason": "comparison failed",
                                   "consideredValue": -2
                               }
                           ]
                       }
                   ]
               }
           ]
       }
   }
}

SagarMahadik avatar Mar 29 '23 06:03 SagarMahadik