1

我希望我的一个模型中的唯一 _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……但这让我在里面哭泣。

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

4

2 回答 2

5

Doodle 或 Die 正在使用这个 shortid 库https://github.com/dylang/shortid ,似乎经过了实战测试。

于 2012-07-17T17:15:44.650 回答
2

通过创建唯一索引,_id如果您尝试插入具有重复键的文档,则会出现错误。因此,将错误处理包装在您执行的任何插入操作中,以查找错误,然后生成另一个 ID 并在这种情况下重试插入。您可以在架构中添加一个方法来实现这种增强的保存以保持干净和干燥。

于 2012-07-17T14:44:26.587 回答