Node.js + Mongoose / Mongo & a shortened _id field

I'd like the unique _id field in one of my models to be relatively short: 8 letters/numbers, instead of the usual Mongo _id which is much longer. Having a short unique-index like this helps elsewhere in my code, for reasons I'll skip over here. I've successfully created a schema that does the trick (randomString is a function that generates a string of the given length):

new Schema('Activities',  {
    '_id': { type: String, unique: true, 'default': function(){ return randomString(8); } },   
    // ... other definitions
}

This works well so far, but I am concerned about duplicate IDs generated from the randomString function. There are 36^8 possible IDs, so right now it is not a problem... but as the set of possible IDs fills up, I am worried about insert commands failing due to a duplicate ID.

Obviously, I could do an extra query to check if the ID was taken before doing an insert... but that makes me cry inside.

I'm sure there's a better way to be doing this, but I'm not seeing it in the documentation.

Answers


By creating a unique index on _id you'll get an error if you try to insert a document with a duplicate key. So wrap error handling around any inserts you do that looks for the error and then generates another ID and retries the insert in that case. You could add a method to your schema that implements this enhanced save to keep things clean and DRY.


This shortid lib https://github.com/dylang/shortid is being used by Doodle or Die, seems to be battle tested.


Need Your Help

Codeigniter not connecting to my SMTP server

php email codeigniter smtp

For some reason CodeIgniter is not connecting to my SMTP server, anyone have any problems surrounding this?

getting strange error when submitting to iTunes Connect

iphone itunesconnect

I am on the last stage of my upload, and i clicked submit, only to receive the error;