【问题标题】:Node.js + Mongoose / Mongo & a shortened _id fieldNode.js + Mongoose / Mongo 和一个缩短的 _id 字段
【发布时间】:2012-07-18 01:15:44
【问题描述】:

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

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

    【讨论】:

    • 很高兴你发布这个 id gen。看起来gr8。虽然你知道这个世代有什么认真的用户吗?
    【解决方案2】:

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

    【讨论】:

    • 有趣,我猜包装错误处理程序比做一个额外的查询来事先检查错误是否存在要好。尽管如此,我很惊讶没有更优雅的方式来处理这个问题。无论如何,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2015-09-19
    • 2015-03-25
    • 2021-02-22
    • 2013-06-11
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多