julianc
julianc

Reputation: 177

Mongoid: getting mongo error code from Moped::Errors

I'm building a Rails server with the model stored in MongoDB using Mongoid.

There are cases where a user can attempt to add a document to the mongo database with a duplicate index value. Is there a way to retrieve the MongoDB error code (in this case 11000) without parsing the error message so that I can make my exception handling more robust?

EDIT: Title had Mongoid::Errors instead of Moped::Errors

Upvotes: 2

Views: 910

Answers (1)

theTRON
theTRON

Reputation: 9659

I developed the mongoid_token gem and encountered this exact problem, since the core functionality of this gem relies on being able to identify if a particular field (in this case, the token) is the cause of the key duplication.

If all you're after is the error code, the yes - you can get this. However, if you need more precise details (such as the field name), you will need parse the error description.

Also, if you're testing for duplicate keys, I think you'll need to check for both error codes 11000 and 11001 (duplicate key on update). A partial list of the mongoDB error codes is here.

I've paraphrased some of the code from the gem below:

begin
    #... do whatever
rescue Moped::Errors::OperationFailure => e
  description = e.details['err']

  if [11000, 11001].include?(e.details['code'])
    # Duplicate key error
  end
end

Upvotes: 3

Related Questions