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

时间:2012-07-17 14:21:52

标签: node.js mongodb mongoose

我希望我的一个模型中的唯一_id字段相对较短:8个字母/数字,而不是通常的Mongo _id,它更长。像这样的短唯一索引有助于我的代码中的其他地方,因为我将跳过这里。我已经成功创建了一个可以实现技巧的模式(randomString是一个生成给定长度字符串的函数):

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

到目前为止效果很好,但我担心从randomString函数生成的重复ID。有36 ^ 8个可能的ID,所以现在它不是问题...但随着可能ID的集合填满,我担心插入命令由于重复ID而失败。

显然,我可以做一个额外的查询来检查ID是否在插入之前被拍摄了......但是这让我在里面哭了。

我确信有更好的方法可以做到这一点,但我没有在文档中看到它。

2 个答案:

答案 0 :(得分:5)

这个短小的lib https://github.com/dylang/shortid正被Doodle或Die使用,似乎经过了战斗测试。

答案 1 :(得分:2)

通过在_id上创建唯一索引,如果您尝试插入包含重复键的文档,则会出现错误。因此,在查找错误的任何插入周围包装错误处理,然后生成另一个ID并在该情况下重试插入。您可以在架构中添加method,以实现此增强保存,以保持干净和干燥。