Node.js + Mongoose / Mongo&缩短的_id字段

我想在我的一个模型中的独特的_id字段是相对较短的:8个字母/数字,而不是通常的Mongo _id,这是更长的时间。 有一个像这个简短的唯一索引有助于我的代码中的其他地方,原因我会跳过这里。 我已经成功地创build了一个架构来实现这个技巧(randomString是一个生成给定长度的string的函数):

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

到目前为止,这工作得很好,但我担心由randomString函数生成的重复ID。 有36 ^ 8个可能的ID,所以现在这不是一个问题…但随着一组可能的ID填满,我担心插入命令失败,由于重复的ID。

显然,我可以做一个额外的查询来检查ID是否在插入之前被采取…但是这让我哭了。

我相信有一个更好的方法来做到这一点,但我没有在文档中看到它。

通过在_id上创build唯一索引,如果尝试插入带有重复键的文档,则会出现错误。 因此,围绕任何查找错误的插入来处理error handling,然后生成另一个ID并在这种情况下重试插入。 您可以添加一个方法到您的模式,实现这个增强的保存,以保持干净和干燥。

Doodle或Die正在使用这个shortid lib https://github.com/dylang/shortid ,似乎是经过testing的。